JDBC

//********** 각 경우별 드라이버 연동하기 **************/

** DB2 **
연결 URL : "jdbc:db2:Catalog된 DB명"
드라이버 클래스 : COM.ibm.db2.jdbc.app.DB2Driver

** JDK jdbc-odbc driver (Type1) **
연결 URL : "jdbc:odbc:"
드라이버 클래스 : sun.jdbc.odbc.JdbcOdbcDriver

** Oracle thin driver (Type4) **
연결 URL : "jdbc:oracle:thin:@:port:"
드라이버 클래스 : oracle.jdbc.driver.OracleDriver

** Oracle oci driver (Type2) **
연결 URL : "jdbc:oracle:oci:@"
드라이버 클래스 : oracle.jdbc.driver.OracleDriver

** Sybase jConnect driver (Type2) **
연결 URL : "jdbc:sybase:Tds::"
드라이버 클래스 : com.sybase.jdbc2.jdbc.SybDriver

** Informix JC1 driver (Type4) **
연결 URL : "jdbc:informix-sql://:/:INFORMIXSERVER"
드라이버 클래스 : com.informix.jdbc.IfxDriver

** mSQL Imaginary JDBC driver (Type4) **
연결 URL : "jdbc:msql://:/"
드라이버 클래스 : com.imaginary.sql.msql.MsqlDriver

** Postgres driver (Type4) **
연결 URL : "jdbc:postgresql://:/"
드라이버 클래스 : postgresql.driver

** MM MySQL driver (Type4) **
연결 URL : "jdbc:mysql://:/"
드라이버 클래스 : org.git.mm.mysql.Driver

** Access **

연결 URL : jdbc:odbc:설정한 odbc명

드라이버 클래스 : sun.jdbc.odbc.JdbcOdbcDriver


mysql은 JConnector 3.0 부터는 com.mysql.jdbc.Driver

연결 URL 은 jdbc:mysql://localhost/dbname?Unicode=true&characterEncoding=EUC_KR

같이 인코딩 타입을 직접 줌으로써 한글 변환문제에 좀더 쉽게 해결할 수 있음.



// ******************************Connected To IBM AS/400

Class.forName("com.ibm.as400.access.AS400JDBCDriver");
com = Driver.Manager.getConnection("jdbc:as400://10.20.30.40/testlib;user=user;password=pass");

// ******************************Connected To Unisql

Class.forName("unisql.jdbc.driver.UniSQLDriver");
con = Driver.Manager.getConnection("jdbc:unisql:10.20.30.40:43300:demodb:::", "user","pass");


// ******************************Connected To Jdbc-Odbc Type - 1 Driver

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// con = DriverManager.getConnection("Jdbc:Odbc:dsnname","userid","password");
con = DriverManager.getConnection("jdbc:odbc:Driver={SQL Server};Server=servername;Database=pubs","userid","password");

// ******************************Connected To Ms-Access JDBC ODBC Driver .

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("Jdbc:Odbc:dsnname","","");
// con = DriverManager.getConnection("jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=G:/admin.mdb","","");

// ******************************Connected To Ms-Access Type-3 Driver.

Class.forName ("acs.jdbc.Driver");
String url = "jdbc:atinav:servername:5000:C:\\admin.mdb";
String username="Admin";
String password="";
Connection con = DriverManager.getConnection(url,username,password);

// ******************************Connected To Microsoft SQL.

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://servername:1433","userid","password");

// ******************************Connected To Merant.

Class.forName("com.merant.datadirect.jdbc.sqlserver.SQLServerDriver");
con = DriverManager.getConnection("jdbc:merant:sqlserver://servername:1433;User=userid;Password=password");

// ******************************Connected To Atinav SqlServer.

Class.forName ("net.avenir.jdbc2.Driver");
con= DriverManager.getConnection("jdbc:AvenirDriver://servername:1433/pubs","userid","password");

// ******************************Connected To J-Turbo.

String server="servername";
String database="pubs";
String user="userid";
String password="password";

Class.forName("com.ashna.jturbo.driver.Driver");
con= DriverManager.getConnection("jdbc:JTurbo://"+server+"/"+database,user,password);

// ******************************Connected To jk Jdbc Driver.

String url= "jdbc:jk:server@pubs:1433";
Properties prop = new Properties();
prop.put("user","userid");//Set the user name
prop.put("password","password");//Set the password

Class.forName ("com.jk.jdbc.Driver").newInstance();
con = DriverManager.getConnection (url, prop);*/

// ******************************Connected To jNetDirect Type - 4 Driver

String sConnect = "jdbc:JSQLConnect://127.0.0.1/database=pubs&user=userid&password=password";
Class.forName ("com.jnetdirect.jsql.JSQLDriver").newInstance();
Connection con= DriverManager.getConnection(sConnect);

// ******************************Connected To AvenirDriver Type - 4 Driver

// String url= "jdbc: AvenirDriver: //servername:1433/pubs";
// java.util.Properties prop = new java.util.Properties ();
// prop.put("user","userid");
// prop.put("password","password");

Class.forName ("net.avenir.jdbc2.Driver");
System.out.println(" Connected To AvenirDriver Type - 4 Driver");
con= DriverManager.getConnection("jdbc:AvenirDriver://servername:1433/pubs","userid","password");

// ******************************Connected To iNet Sprinta2000 Type - 4 Driver

String url="jdbc:inetdae7:servername:1433";
String login="userid";
String password="password";
Class.forName("com.inet.tds.TdsDriver");
System.out.println(" Connected To iNet Sprinta2000 Type - 4 Driver");
con=DriverManager.getConnection(url,login,password);

// ******************************Connected To iNet Opta2000 Type - 4 Driver
String url="jdbc:inetdae7:servername:1433";
String login="sagar";
String password="sagar";
Class.forName("com.inet.tds.TdsDriver").newInstance();
System.out.println(" Connected To iNet Opta2000 Type - 4 Driver");
con=DriverManager.getConnection(url,login,password);

by Andy | 2007/12/03 15:16 | 트랙백

월급쟁이 3년만에 7천만원모으기



랍벤덤이 돈을 모아야겠다고 생각하기 시작한 것은 취업한 후 2~3년이 지나서부터. 처음에는 50만 원씩 저축을 했지만, 어느 날 이렇게 하면 몇년이 지나도 5000만 원도 모으기 힘들겠다고 자각하게 됐다. 술, 담배도 하지 않고, 자동차도 없으며, 회사 기숙사에서 생활하기 때문에 돈 들 일이 많지 않았지만 50만 원을 저축하면서도 돈이 풍족하게 남는 것은 아니었던 것. 하지만 그는 부동산이나 주식 투기가 아닌, 절약과 저축이라는 가장 기본적인 방법으로 3년 동안 7000만 원을 만들었다. 그의 노하우는 월급 받아 사는 평범한 사람들도 따라할 수 있는 것.

절약과 저축으로 목돈을 만든다는 것은 분명 뭔가 이유가 있기 마련. 예를 들어 휴일에 회사에 나와 일한 A씨와 놀러 다닌 B씨를 비교해보자. A씨는 잔업수당 10만 원을 받고 식사까지 회사에서 해결했지만, B씨는 반대로 여행 다니며 외식하는 바람에 10만 원 이상을 썼다. 결국 휴일 하루동안 두 사람의 지갑은 20만 원의 차이가 나게 되는 것이다. 별것 아니라고 생각할 수 있지만 이것이 모이면 무시할 수 없는 큰돈이 된다. 1년을 놓고 볼 때 2000만~3000만 원 이상의 차이를 보일 수도 있다. 마찬가지로 하루에 1만 원을 덜 쓰고 더 쓰고의 문제가 크게 차이 나지 않아 보이지만, 이것을 1년으로 따져보면 만만치 않은 액수가 된다.

술, 담배를 좋아하게 되면 유흥 문화에 빠져들기 쉽다. 술 한잔 하다가 1차에서 헤어지기 힘들어 결국 비싼 곳에서 술을 마시게 되고, 호탕하게 카드로 긋는다. 그러고 난 후엔 엄청난 카드 대금 고지서에 돈을 모으고 싶은 의욕이 생기지 않는 악순환이 반복된다. 또 오늘 친구가 한잔 사면, 미안한 마음에 다음 번엔 친구에게 내가 한잔을 사게 된다. 담뱃값 역시 인상된 이후로 계산해보면 한 달에 5만~6만 원의 지출을 만든다. 결국 술, 담배를 가까이하면 돈 쓰는 단위도 커지게 되고, 1만 원 정도는 가벼운 느낌에 아무 생각 없이 쓰게 된다. 술집에 가서 20만~30만 원까지 썼는데 1만 원 정도쯤이야라고 생각해 결국 저축을 하지 못하게 되는 것.

주식 투자는 돈만 있다고 되는 것이 아니다. 주가 분석을 할 줄 알고, 거래량 등에 대한 기초 지식도 있어야 하지만 대부분 공부하기 귀찮아서 그냥 하다가 자신의 무덤을 파게 된다. 주식에 대한 지식이 약한 사람은 주식을 안 하는것이 재테크다. 또 주식 투자에서 200만 원을 잃었다면, 왜 잃었는지 1~2년 쉬며 반성하고 공부를 해야 하는데, 눈앞의 손실이 아까워 실력이 부족한 상황에서 덤비고 결국 자멸을 초래한다. 자신 없다면 하지 마라. 하지만 투기가 아닌 투자의 목적으로, 우량주에 월 20만~30만 원씩 장기 투자한다면 절대 망할 이유가 없다. 우량 기업을 잘 모르겠다면 경제신문에 ‘Blue chip’이라고 나온 기업들을 주목하는 간단한 방법도 있다.

할인마트에 가면 다른 사람들도 한 바구니씩 사니까 무의식적으로 그대로 따라하게 된다. 그렇지만 일주일 안에 쓸 것과 당장 쓸 것만 구입하는 것이 현명하다. 지금 싸니까 사뒀다가 나중에 쓰지라고 생각하면 결국 쓰지 않을 물건을 사게 되는 꼴. 꼭 사야 할 것만 메모해서 장을 보면 필요한 것만 사게 되니까 지출도 줄어든다. 또 월급이나 보너스를 받고 나서 ‘딱 하루인데’라며 자신도 모르게 하루에 너무나 많은 돈을 쓸 때가 있다. 기분 때문에 돈 쓰는 것은 후회를 불러온다. 보너스나 월급날 기분을 내기 위해 돈을 쓰는 것은 자제하자. 다음날이면 분명 기분이 달라질 것이다. 당시에는 돈이 굉장히 많은 것 같다는 착각을 하기 쉬운데, 결국 고정적인 지출을 계산하고 나면 그대로라는 것을 기억하자.

가장 중요한 것은 큰 지출을 봉쇄하는 것. 예를 들어 자가용 자동차를 유지하려면 구입비와 유지비, 보험료 모두 합해 한 달에 50만 원이 그냥 새어나간다. 또 신용카드를 갖고 있으면 자신이 현재 쓸 수 있는 전체 지출에서 30~40% 더 충동 구매하는 것이 보통. 명품 옷이나 고가 화장품 역시 엄청난 씀씀이의 주범이다. 명품을 구입하느라 한 달 쓸 돈을 한번에 지출하면 결국 그 달은 허리띠를 졸라매야 하고 그 다음 달과 또 다음 달까지 영향을 주게 된다. 잘못해서 카드값을 메우지 못해 연체 이자까지 발생되면 쓸모없는 지출이 늘어나는 것. 친구 밥 사주는 것이나 경조사비 등의 푼돈 쓰는 것은 아무리 아껴도 표시도 안 나고, 사람들에게 욕만 먹을 뿐이다.

저축은 늘리지 않으면 액수가 떨어질 위험이 있기 때문. 여기서 저축의 재미를 주기 위해서 통장도 여러 개를 만든다. 용도별로 근로자우대저축, 장기주택마련저축, 주택부금, 마을금고 적금, 개인 연금 등등 통장이 많아야 저축하는 재미가 붙는다. 또 한 가지, 저축이 불가능하다고 생각하지 말 것. 먹고 싶은 것, 사고 싶은 것을 조금씩 줄이면 못해도 수입의 10~20% 정도는 저축할 수 있다. 저축이 불가능하다는 말은 핑계다. 저축 통장을 만들 때는 단기 통장과 장기 통장을 혼합해 유지한다. 적금을 3년 이상 꾸준히 붓는 것은 목돈 마련에는 좋지만, 도중에 깰 위험이 있다. 반면 1년짜리 단기 저축은 성취감과 함께 비상시 현금을 확보할 수 있게 한다.

현금만 쓰게 되면 돈의 무게감이 느껴지게 된다. 카드로 쓸 때는 가볍게 계산하는 것도 현금 인출기에서 매번 찾아 쓰다 보면 통장의 잔액을 자주 확인하게 된다. 또 지갑에서 현금이 빠지는 것이 바로 느껴지기 때문에 한번쯤 큰 지출을 해도 다음에는 지출을 자제하게 된다. 소득 공제 때문에 신용카드를 사용하는 사람도 많지만, 따져보면 그다지 큰 이익도 아니다. 결론적으로 더 많이 쓰고 조금 다시 받는 것과 같다.

이상하게도 돈이 잘 모이지 않으면 다음과 같은 습관이 있는지 곰곰이 생각해보자. 아침에 늦게 일어나며 아침을 거르기도 한다, 걷기 싫어서 자주 택시를 탄다, 쇼핑하거나 장을 볼 때 귀찮다고 몽땅 산다, 한꺼번에 아낄 수 있을 것이라는 욕심을 부린다, 밥 먹기 싫다고 외식을 한다, 친구들 만나면 자주 늦게까지 술을 마신다…등등. 돈은 나이 먹으면 저절로 생길 거라는 낙관적인 생각을 버린다.

기본적으로 나의 일일/주간/월간 평균 지출을 알고 있어야 한다. 자신의 씀씀이도 정확히 모르면서 아낀다는 것은 이치에 맞지 않다. 가계부는 자기만이 알 수 있게 쉽게 쓰면 된다. 복잡하면 오히려 귀찮아서 안 쓰게 된다. 내가 이번 달에 얼마를 쓰고 얼마를 저축했는지 정도는 바로 말할 수 있어야 하고, 현재 지갑 안에 얼마가 있는지도 알고 있어야 한다.

신용카드는 쓰지 말고 지갑 안은 가볍게 해두는 것이 좋다. 지갑 안에 돈이 많으면 그만큼 많이 쓰게 되어 있고, 돈을 빌려 달라는 사람도 많기 마련.


출처 : Tong - 귀여운발칸님의 유용한 정보통

출처 : Tong - 귀여운발칸님의 유용한 정보통

출처 : Tong - 귀여운발칸님의 유용한 정보통

by Andy | 2007/10/13 21:57 | 트랙백

FCKeditor 사용하기 첫번째

FCKeditor 사용하기 첫번째 [글쓴이 : Think different]2006-02-13 12:05:34

FCKeditor는 OKjsp에서 발견한 웹 에디터컴포넌트이거든.... 첨에 이거보고 무쟈니 대단한 넘들이라고만 생각했지

 

다음이나 네이버에서 게시판 글쓸때 사용하는 ActiveX컨트롤을 XHTML+자바스크립트로 해결했다니..헐헐

 

그러다 이번에 달고나 작업하면서 이넘을 써보기로 한거야

그동안 사용하면서 글쓰기에 대한 문제도 적잖이 나왔거든.. 근데 컴포넌트를 살수도 없고 해서 궁리하다가 까먹고 있었던 이넘을 생각하게 된거였어

 

오픈소스라 좋더군...ㅎㅎㅎ

 

기본 세팅은 http://wiki.fckeditor.net/ 이곳을 참고했고

회사에서 사용하기위해 이렇게 좀더 바꿨어~

 

 

1. 케릭터 셋

이넘은 여러가지 언어들을 다~ 지원하려고 UTF-8을 기본 케릭터셋으로 사용하거든 때문에 한글도 잘 표시가되는거지.. 근데

 

UTF-8이라는게 사용하려면 DB도 셋을 바꿔줘야 하는데 그러질 못하니 살짝 낭패더군..

 

그래서 바꿨어~

 

첫번째 fckeditor.html

실제 에디터 부분인 fckeditor.html 이것만 해결하면 이파일을 포함하게죄는 jsp는 자연히 해결이 되니까...

...\FCKeditor\web\editor\fckeditor.html 이 파일 안에 메타테그를 바꿨지

움 DB 한글문제도 해결~

 

두번째 파일 업로드부분

한글 이름을 가진 파일을 올리는경우 업로드서블릿에서 UTF-8로 받기땜에 한글이 깨지더라구

 

com.fredck.FCKeditor.uploader.SimpleUploaderServlet 여기서 doPost메서드 안에

response.setContentType("text/html; charset=MS949"); 이렇게 해주고

 

com.fredck.FCKeditor.connector.ConnectorServlet 안에

doGet, doPost도 똑같이

response.setContentType("text/html; charset=MS949"); 로 바꿔주니 파일 이름도 해결

 

2. 버튼 추가하기

성의 없이 보이지만...

http://www.okjsp.pe.kr/bbs?act=VIEW&seq=65503&bbs=bbs4&keyfield=content&keyword=fck&pg=0

여기 참고 했어요~ ㅋ

 

3. 이미지 업로드

다~ 조은데 탭이 4개나 되고 복잡하더라고 머가 먼지...

그리고 회사에서 사용할건 이미지 업로드정도면 되는데 이건 서버파일 브라우져 기능도 있고... 머 어쨌던 다양한 기능이 기본제공되더라

 

사용해보나까 이미지 업로드 되면 파일정보를 보여주고 간단한 크기조정이나 레이아웃 같은거도 조정이 가능하더라고 어찌나 조은지..ㅎㅎ

 

문제는 이 두가지(레이아웃조정, 업로드)말고 다른건 별로 쓸일이 없는거였고

또 다른 문제는 팝업창이 뜰때 레이아웃조정하는 탭이 기본으로 뜬다는거... 업로드 창이떠야 당황스럽지 않겠지??

 

버튼추가할때 참고했던 okjsp글에서 버튼관련 부분은 fckeditorcode_ie_2.js(익스플로러), fckeditorcode_gecko_2.js(네스케이프 등 기타 브라우져) 이거 두개를 고치면 된다고 하더군

 

오케바뤼~ 수정~!!

 

첫번째 사용하지 않는 탭제거

fckconfig.js안에 있는 값만 조정하면 되더군

 

FCKConfig.ImageDlgHideLink  = true ; -> 링크관련탭
FCKConfig.ImageDlgHideAdvanced = true ; -> '자세히보기'탭
두개 기본값이 false인데 true로 변경..

 

 

두번째 파일브라우징 제거

역시나 fckconfig.js안에 있는 값

 

FCKConfig.LinkBrowser = false ; -> 링크파일보기
FCKConfig.ImageBrowser = false ; -> 이미지 파일보기
FCKConfig.FlashBrowser = false ; -> 플래시 파일보기

두개 기본값이 true인데 false로 변경..

 

 

세번째 업로드탭을 기본으로

 

fckdialog.html 안에서 fck_image.html을 iframe으로 표시하는구조이더군

그래서 fck_image.js 안에 있는 window.onload = function() 안에

 

 window.parent.SetSelectedTab('Upload');

이렇게 추가했어

 

사실 이미지 업로드창 말고 다른 창들도 이같은 형태로 초기탭 설정이 가능하더라고.. flash도 이렇게 해결했지...

 

하여튼.....해결 ㅡㅡv

by Andy | 2007/09/28 09:38 | 트랙백

FCKeditor java 버전 설치 하기

FCKeditor java 버전 설치
- 환경
O/S : Window XP Professional
Servlet Engine : Tomcat 5.0.28
Character Set : UTF-8
IDE Tool : Eclipse 3.2
FCKEditor Version : 2.3.1( http://prdownloads.sourceforge.net/fckeditor/FCKeditor_2.3.1.zip?download )FCKEditor.Java Version 2.3
( http://sourceforge.net/project/showfiles.php?group_id=75348&package_id=129511 )
1. editor 폴더를 생성하고 톰캣 컨텍스트의 루트를 editor 폴더 경로로 지정
2. fckeditor 다운로드
2-1. http://www.fckeditor.net/download/ 에서 다운로드
2-2. editor 폴더에 다운로드 된 압축 파일의 압축을 풉니다.
2-3. 압축을 풀면 나오는 디렉토리인 FCKeditor 폴더를 editor 하위 폴더로 되게끔 이동합니다.


3. 톰캣을 가동한 후 FCKeditor\_samples\default.html 을 실행하여 fckeditor 를 실행


4. 그러나 이미지 업로드를 할려고 서버 보기를 할 경우 에러가 발생합니다.


5. java 버전용 fckeditor 를 editor 폴더로 다운로드(FCKeditor-2.3.zip)
5-1. http://sourceforge.net/project/showfiles.php?group_id=75348&package_id=129511 에서 다운로드
5-2. editor 폴더에 다운로드 된 압축 파일의 압축을 풉니다.


6. 지정폴더\editor\FCKeditor-2.3\web 하위에 있는
_samples 폴더와 WEB-INF 폴더를 각각 이동.
6-1. 2번에서 만들어진 \editor\FCKeditor\_samples 폴더에
\editor\FCKeditor-2.3\web\_samples 폴더를 붙여넣기 합니다.
6-2.  \editor\WEB-INF 폴더에 \editor\FCKeditor-2.3\web\WEB-INF 폴더를 붙여넣기 합니다.


* 새로운 컨텍스트라면 web.xml 을 그대로 덮어씌운 후 복사하고,
기존에 컨텍스트에 다른 체계가 돌아가 있다면 web.xml 내용 중 <web-app> 부분을
기존 사용중인 컨텍스트에 web.xml 에 붙여넣기 합니다.
( load-on-startup 이 이미 있다면 숫자를 변경함 )

완료하면 폴더 구조는 다음과 같습니다.
( UserFiles 디렉토리는 사용자가 업로드한 이미지 저장 디렉토리입니다. )


* 톰캣 리스타트시에 콘솔 창에 다음과 같이 업로드 제한 파일 확장자 리스트가 나옵니다.
( web.xml 파일에 DeniedExtensionsFile 이란 param-name 으로 지정되어 있습니다. )


7. jsp 샘플을 실행
그러나 다음과 같이 fckeditor.html 파일을 찾을수 없다는 메시지가 뜹니다.


\editor\FCKeditor\_samples\jsp\sample01.jsp 내용을 보면
oFCKeditor.setBasePath( "/FCKeditor/" ) ;
위와 같은 부분이 있습니다.


컨텍스트의 루트 폴더가 FCKeditor 이라면 에러 없이 수행되었겠지만
루트가 editor 폴더로 지정되어 있으므로
oFCKeditor.setBasePath( "/editor/FCKeditor/" ) ;
위처럼 수정해주면 제대로 수행되는 것을 확인할수 있습니다.


7-3. 이미지 버튼을 눌러서 서버보기를 눌러보지만 4. 처럼 스크립트 오류가 발생합니다.


8. sample02.jsp 의 태그 라이브러리를 이용한 파일 브라우저 경로 수정
8-1. \editor\FCKeditor\_samples\jsp\sample02.jsp 를 보면 7. 처럼 fckeditor.html 을 찾을수 없다는 메시지가 뜹니다.
<FCK:editor id="EditorDefault" basePath="/FCKeditor/"
위 부분에서 basePath 를 현재 테스트 경로에 맞게끔
<FCK:editor id="EditorDefault" basePath="/editor/FCKeditor/" 로 수정 후 sample02.jsp 를 수정하면
에디터는 잘 나오나 역시 이미지 뷰어나 업로드 부분은 작동하지 않습니다.

sample02.jsp 에선 다음과 같이 브라우저 URL 과 업로드 URL 을 정의한 부분을 볼수 있습니다.
imageBrowserURL="/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector"
linkBrowserURL="/FCKeditor/editor/filemanager/browser/default/browser.html?Connector=connectors/jsp/connector"
flashBrowserURL="/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/jsp/connector"
imageUploadURL="/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Image"
linkUploadURL="/FCKeditor/editor/filemanager/upload/simpleuploader?Type=File"
flashUploadURL="/FCKeditor/editor/filemanager/upload/simpleuploader?Type=Flash"


editor 폴더 하위에 FCKeditor 폴더가 위치한 구조이니 /FCKeditor/editor... 부분 앞에
/editor/FCKeditor/editor... 형식으로 수정하고,


web.xml 의
<servlet-mapping>
 <servlet-name>Connector</servlet-name>
 <url-pattern>/editor/filemanager/browser/default/connectors/jsp/connector</url-pattern>
</servlet-mapping>
<servlet-mapping>
 <servlet-name>SimpleUploader</servlet-name>
 <url-pattern>/editor/filemanager/upload/simpleuploader</url-pattern>
</servlet-mapping> 


위 url-pattern 경로대로 Connector 부분과 UploadURL 을 현재 경로를 예를 들어 재구성하자면
다음과 같이 수정하여 sample02.jsp 을 작성하면 됩니다.
imageBrowserURL="/editor/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=/editor/editor/filemanager/browser/default/connectors/jsp/connector"
linkBrowserURL="/editor/FCKeditor/editor/filemanager/browser/default/browser.html?Connector=/editor/editor/filemanager/browser/default/connectors/jsp/connector"
flashBrowserURL="/editor/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Flash&Connector=/editor/editor/filemanager/browser/default/connectors/jsp/connector"
imageUploadURL="/editor/editor/filemanager/upload/simpleuploader?Type=Image"
linkUploadURL="/editor/editor/filemanager/upload/simpleuploader?Type=File"
flashUploadURL="/editor/editor/filemanager/upload/simpleuploader?Type=Flash"


위 URL은 web.xml 의 url-pattern 과 매핑된다는 점을 이해하셔야 합니다.
이런 특징을 통하여 경로를 판별할수 있습니다.


8-2. 이미지링크,플래쉬 브라우저 및 업로드가 제대로 동작하지 않을 경우...

8-2-1. browser.html 파일의 경로가 틀렸을 경우
basePath 만 수정한 후 위 8-1. 에서처럼 경로를 수정하지 않을 경우
다음과 같은 화면을 볼수 있습니다.


8-2-2. Connector 부분의 경로가 틀릴 경우
Connector 의 경로는 수정하지 않은채 browser.html 의 경로만 옳바르게 설정할 경우
다음과 같은 화면을 볼수 있습니다.


* Connector 의 경로는 web.xml 의 Connector 의 url-pattern 과 관련이 되어있습니다.
8-1. 에서 보신 web.xml 처럼 /editor/filemanager/browser/default/connectors/jsp/connector 으로
지정되어 있따면 Connector 의 주소는
http://서버url/컨텍스트명/editor/filemanager/browser/default/connectors/jsp/connector 이 됩니다.



위 화면처럼 파일을 찾을수 없다는 화면이 아닌 다른 화면이 나오게 되면 맞는 경로이므로
Connector 부분은 http://서버url/ 을 제외한 나머지 주소를 기술하면 됩니다.
( 8-1. 의 Connector 주소 설정 참조 )


* 옳바른 주소 설정에도 불구하고 위 화면에서처럼 Connector 을 브라우저에서 실행했을 때
다른 에러가 발생한다면 XML 을 생성하는 xalan 콤포넌트가 존재하는지 의심해봐야 합니다.


왜 에러가 발생하는지 보기 위한 테스트URL)
http://서버url/컨텍스트명/editor/filemanager/browser/default/connectors/jsp/connector?Command=GetFoldersAndFiles&Type=Image&CurrentPath=/


위 화면에서처럼
javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
에러가 발생한다면 Xerces-J-tools의 xalan.jar 를(http://www.apache.org/dist/xml/xerces-j/)

찾아 다운로드 하여 \WEB-INF\lib 폴더에 넣은 후 톰캣 재가동후 새로운 브라우저에서
테스트 URL 을 확인해보면 다음과 같이 에러 없이 XML 화면이 나오는 것을 확인할수 있습니다.


8-2-3. 업로드 URL 의 확인
Connector 와 마찬가지로 web.xml 의 SimpleUploader 의 url-pattern 의 영향을 받습니다.
위 web.xml 에선 url-pattern 이 /editor/filemanager/upload/simpleuploader 이므로
테스트 URL)
http://서버url/컨텍스트명/editor/filemanager/upload/simpleuploader 을 쳤을 경우 다음과 같은 화면이 나와야 정상입니다.


위 결과대로 나온다면 image,link,flash UploadUrl 을 설정하면 됩니다.( 8-1. 의 각 UploadUrl 확인 )


9. 테스트
이미지를 업로드하고, 목록에 정상적으로 출력된다면 모든 설치가 성공적으로 완료된 것입니다.


10. 샘플이 아닌 기존 체계에 fckeditor 를 적용할 경우.
태그 라이브러리 사용을 위한
<%@ taglib uri="http://fckeditor.net/tags-fckeditor" prefix="FCK" %> 를 페이지 상단에 삽입 하고,
<TEXTAREA></TEXTAREA> 부분에 sample02.jsp 의 <FCK:editor ~ </FCK:editor> 부분을 복사하여 붙여넣기 합니다.
기본 sample02.jsp 에는 <FCK:editor id="EditorDefault" 처럼 id 가 EditorDefault 로 되어있는데
만약 <TEXTAREA name = "contents" 와 같이 name 이 contents 였다면
<FCK:editor id="contents" 로 지정하면 받는 부분에서 contents 로 받을 수 있습니다.


예)
- \editor\board\create_form.jsp(UTF-8 로 작성)

<%@ taglib uri="http://fckeditor.net/tags-fckeditor" prefix="FCK" %>

<%@ page contentType = "text/html;charset=utf-8" %>
<HTML>
<HEAD>
<TITLE>글 입력 폼</TITLE>
<META http-equiv = "Content-Type" content = "text/html;charset=utf-8" />
<SCRIPT>
 function send()
 {
  create_form.submit();
 }
</SCRIPT>
</HEAD>
<BODY>
<FORM name = "create_form" method = "post" action = "./create.jsp">
 <FCK:editor id="contents" basePath="/editor/FCKeditor/"
  imageBrowserURL="/editor/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=/editor/editor/filemanager/browser/default/connectors/jsp/connector"
  linkBrowserURL="/editor/FCKeditor/editor/filemanager/browser/default/browser.html?Connector=/editor/editor/filemanager/browser/default/connectors/jsp/connector"
  flashBrowserURL="/editor/FCKeditor/editor/filemanager/browser/default/browser.html?Type=Flash&Connector=/editor/editor/filemanager/browser/default/connectors/jsp/connector"
  imageUploadURL="/editor/editor/filemanager/upload/simpleuploader?Type=Image"
  linkUploadURL="/editor/editor/filemanager/upload/simpleuploader?Type=File"
  flashUploadURL="/editor/editor/filemanager/upload/simpleuploader?Type=Flash">
  This is some <strong>sample text</strong>. You are using <a href="http://www.fredck.com/fckeditor/">FCKeditor</a>.
 </FCK:editor>
</FORM>
<INPUT type = "button" onClick = "return send()" value = "전송">
</BODY>
</HTML>


- \editor\board\create.jsp(UTF-8 로 작성)

<%@ page contentType = "text/html;charset=utf-8" %>
<%
 String contents = request.getParameter("contents");

 contents = new String(contents.getBytes("8859_1"), "UTF-8");
%>
<HTML>
<HEAD>
<TITLE></TITLE>
<META http-equiv = "Content-Type" content = "text/html;charset=utf-8" />
</HEAD>
<BODY>
<%= contents %>
</BODY>
</HTML>


11. 몇가지 Tip.
11-1. 공백 값 입력을 방지하기 위해선 스크립트를 다음과 같이 수정합니다.

/**
 * 데이터 전송전 체크
 */
function send()
{
 var oEditor = FCKeditorAPI.GetInstance('contents') ;

 var div = document.createElement("DIV");
 
 div.innerHTML = oEditor.GetXHTML();

 if( isNull( div.innerText ) )
 {
  alert("내용을 입력하세요."); 
  oEditor.Focus();
  return false; 
 }

 create_form.submit();
}

/**
 * 정규표현식을 이용한 공백 체크
 */
function isNull( text ) 

 if( text == null ) return true; 

 var result = text.replace(/(^\s*)|(\s*$)/g, ""); 

 if( result ) 
  return false; 
 else 
  return true; 
}



11-2. 페이지 로딩시 바로 포커스를 주고 싶다면
\editor\FCKeditor\fckconfig.js 의 FCKConfig.StartupFocus 의 값을 true 로 변경하거나

태그라이브러리 옵션으로 startupFocus="true" 를 설정합니다.


11-3. 읽기 전용으로 변환하고 싶다면

var oEditor = FCKeditorAPI.GetInstance('contents') ;
oEditor.EditorDocument.body.contentEditable = false;
oEditor.EditorDocument.body.unselectable = true;


11-4. 기타 환경 설정은 fckconfig.js 파일을 참조하고 아래 사이트를 참조하시기 바랍니다.
http://sourceforge.net/forum/forum.php?forum_id=257180 ( fckeditor help 포럼 )
http://java.lin4u.com/my/index.php?category=&keyfield=title&keyword=fck&favorite ( 폰트 관련 참조 )
http://wiki.fckeditor.net/ ( fckeditor 위키 사이트 )

http://www.ghlab.com/blog/fckeditor/editor.zip ( 위 샘플들을 테스트한 컨텍스트 모든 파일들 )

출처 : Tong - 디트리히님의 자바관련통

by Andy | 2007/09/28 09:29 | 트랙백

유용한 자바스크립트

===============================================================================
주  시 스 템 : 공통 개발
서브  시스템 : 없음
프로그램  ID : JCommon.js
프로그램  명 : 공통 기능 Javascript
프로그램개요 : 공통적으로 사용되는 Javascript를 정의한다
작   성   자 : 유명현, 최선재
작   성   일 : 2002.04.04
마지막 수정일 : 2003.11.30
===============================================================================


-------------------------------숫자--------------------------------
/*=========================================*
* 입력값이 숫자인지를 확인한다
* param : sVal 입력스트링
* return : Boolean True이면 숫자값
/*=========================================*
function isNumber(sVal) {    
   if(sVal.length < 1) {
       return false;
   }

   for(i=0; i<sVal.length; i++) {
       iBit = parseInt(sVal.substring(i,i+1));     //문자(Char)를 숫자로 변경

       if(('0' < iBit) || ('9' > iBit)) {
           //alert(i+':'+iBit+':'+'Mun');
       } else {
           return false;
       }
   }
   return true;
}

/*=========================================*
* 입력값이 숫자인지를 확인한다. (' '까지 괜찮음)
* param : sVal 입력스트링
* return : Boolean True이면 숫자값
/*=========================================* 
function isNumberSpace(sVal) {    
   if(sVal.length < 1) {
   return false;
   }

   for(var i=0;i<sVal.length;i++)    {
       sBitData = sVal.substring(i,i+1);     //문자열의 문자(char)를 넣는다

       if(sBitData == ' ') {
       } else {
           iBit = parseInt(sVal.substring(i,i+1)); //문자(char)를 숫자로

           if(('0' < iBit) || ('9' > iBit) || (' ' == sBitData)) {
           } else {
               return false;
           }
       }
   }
   return true;
}

/*=========================================*
* sVal 값이 숫자인지를 확인한다.('.'까지 괜찮음)
*
* param : sVal 입력스트링
*
* return : Boolean  True이면 숫자값
/*=========================================*
function isNumberDot(sVal) {
   if (sVal.length < 1) {
       return false;
   }

   var result=0;
   var position=0;
   var bMinus;

   //마이너스 부호의 갯수를 카운트하여 올바른지 확인
   for(position=0; position<sVal.length; position++) {
       if( getAt(sVal, position) == '-' ) {
           result += 1;
       }
   }

   if(result > 1)
   return false;

   result = 0;
   //소수점의 갯수를 카운트하여 올바른지 확인
   for(position=0; position<sVal.length; position++) {
       if( getAt(sVal, position) == '.' ) {
           result += 1;
       }
   }

   if(result > 1)
   return false;

   //마이너스 부호를 가지고 있는지 확인. 있다면 부호는 빼낸다.
   if(sVal.substr(0,1) == '-') {
       bMinus = true;
       sVal = sVal.substring(1, sVal.length);    
   }

   //맨앞에 소수점이 있거나 맨 뒤에 있을 경우 0 을 추가해 줌.
   if(sVal.substring(0,1) == '.')
   sVal = '0' + sVal;
   else if(sVal.substring(sVal.length-1,sVal.length) == '.')
   sVal = sVal + '0';

   //검사.
   for(var position=0; position<sVal.length; position++) {
       if( (getAt(sVal, position) < '0' || getAt(sVal, position) >'9') && getAt(sVal,position) != '.' )
       return false;
   }
   
   return true;
}

function getAt(sVal, position) {
   return sVal.substring(position, position+1)    
}

-----------------------------숫자채우기---------------------------
/*=========================================*
* 앞자리의 연속된 Zero 값을 자른다.
* param : sVal 입력스트링
* return : String  Zero값을 자른 값
/*=========================================*
function trimZero(sVal) {
   var i;
   i = 0;
   while (sVal.substring(i,i+1) == '0') {
       i++;
   }
   return sVal.substring(i);
}

/*=========================================*
* 입력값의 앞에 정해진 자리수만큼 0을 채운다. 
* param : sVal 입력스트링, iSize
* return : String
/*=========================================* 
function fillZero(sVal, iSize) {
   while(sVal.length < iSize) {
       sVal = "0" + sVal;
   }
   return sVal;
} 

/*=========================================*
* 길이가1인 경우 앞에 "0"을 붙인다.
*
* param : sVal 입력스트링
*
* return : String  "0"값을 포함하는 값
/*=========================================*
function addZero(sVal) {
   var iLen = sVal.length; //인수값의 길이를 구한다.

   if(iLen == 1) {
       sVal = "0"+sVal;
   } else if(iLen == 0) {
       return;
   }
   return sVal;
}


-------------------------------날짜--------------------------------
/*=========================================*
* 날짜 여부를 확인한다.(월일 or 년월 or 년월일)
*
* param : sYmd 입력스트링(MMDD or YYYYMM or YYYYMMDD)
*
* return : Boolean true이면 날짜 범위임
*
* 수정   : 월이나 일에 00 입력시 스크립트 에러. trimZero 부분을 수정(2003/11/19)
/*=========================================*
function isDate(sYmd) {
   var bResult; // 결과값을 담는 변수(Boolean)

   switch (sYmd.length) {
       case 4://월일
           bResult = isDateMD(sYmd);
           break;
       case 6://년월
           bResult = isDateYM(sYmd);
           break;
       case 8://년월일
           bResult = isDateYMD(sYmd);
           break;
       default:
           bResult = false; // 날짜 값이 아님
           break;
   }
   
   return bResult;
}

/*=========================================*
* 날짜 여부를 확인한다.(년월일)
*
* param : sYmd 입력스트링(YYYYMMDD)
*
* return : Boolean true이면 날짜 범위임
/*=========================================*
function isDateYMD(sYmd) {
   // 길이 확인     //@@ 12.5 순서 변경
   if(sYmd.length != 8) {
       alert('일자를 모두 입력하십시오');
       return false;
   }

   // 숫자 확인
   if(!isNumber(sYmd)) {
       alert('날짜는 숫자만 입력하십시오');
       return false;
   }

   var iYear = parseInt(sYmd.substring(0,4),10); // 년도 입력(YYYY)
   var iMonth = parseInt(sYmd.substring(4,6),10); //월입력(MM)
   var iDay = parseInt(sYmd.substring(6,8),10);     //일자입력(DD)

   if((iMonth < 1) ||(iMonth >12)) {
       alert(iMonth+'월의 입력이 잘못 되었습니다.');
       return false;
   }

   //각 달의 총 날수를 구한다
   var iLastDay = lastDay(sYmd.substring(0,6)); // 해당월의 마지말날 계산

   if((iDay < 1) || (iDay > iLastDay)) {
       alert(iMonth+'월의 일자는 1 - '+ iLastDay +'까지입니다.');
       return false;
   }

   return true;
} 

/*=========================================*
* 날짜 여부를 확인한다.(월일)
*
* param : sMD 입력스트링(MMDD)
*
* return : Boolean true이면 날짜 범위임
/*=========================================*
function isDateMD(sMD) {
   // 숫자 확인
   if(!isNumber(sMD))    {
       alert('숫자만 입력하십시오');
       return false;
   }

   // 길이 확인
   if(sMD.length != 4) {
       alert('일자를 모두 입력하십시오');
       return false;
   }

   var iMonth = parseInt(sMD.substring(0,2),10); //해당월을 숫자값으로
   var iDay = parseInt(sMD.substring(2,4),10);    //해당일을 숫자값으로

   if((iMonth < 1) ||(iMonth >12)) {
       alert(iMonth+'월의 입력이 잘못 되었습니다.');
       return false;
   }

   //각 달의 총 날수를 구한다
   if (iMonth < 8 ) {
       var iLastDay = 30 + (iMonth%2);
   } else {
       var iLastDay = 31 - (iMonth%2);
   }

   if (iMonth == 2) {
       iLastDay = 29;
   }

   if((iDay < 1) || (iDay > iLastDay)) {
       alert(iMonth+'월의 일자는 1 - '+iLastDay+'까지입니다.');
       return false;
   }

   return true;
} 

/*=========================================*
* 날짜 여부를 확인한다.(년월)
*
* param : sYM 입력스트링(YYYYMM)
*
* return : Boolean true이면 날짜 범위임
/*=========================================*
function isDateYM(sYM) {
   // 숫자 확인
   if(!isNumber(sYM)) {
       alert('날짜는 숫자만 입력하십시오');
       return false;
   }

   // 길이 확인
   if(sYM.length != 6) {
       alert('일자를 모두 입력하십시오');
       return false;
   }

   var iYear = parseInt(sYM.substring(0,4),10); //년도값을 숫자로
   var iMonth = parseInt(sYM.substring(4,6),10); //월을 숫자로

   if((iMonth < 1) ||(iMonth >12)) {
       alert(iMonth+'월의 입력이 잘못 되었습니다.');
       return false;
   }

   return true;
} 

/*=========================================*
* 년월을 입력받아 마지막 일를 반환한다(년월)
*
* param : sYM 입력스트링(YYYYMM)
*
* return : String 해당월의 마지막날
/*=========================================*
function lastDay(sYM)    {
   if(sYM.length != 6) {
       alert("정확한 년월을 입력하십시오.");
       return;
   }

   if(!isDateYM(sYM)) {
       return;
   }

   daysArray = new makeArray(12);    // 배열을 생성한다.

   for (i=1; i<8; i++) {
       daysArray[i] = 30 + (i%2);
   }
   
   for (i=8; i<13; i++) {
       daysArray[i] = 31 - (i%2);
   }

   var sYear = sYM.substring(0, 4) * 1;
   var sMonth = sYM.substring(4, 6) * 1;

   if (((sYear % 4 == 0) && (sYear % 100 != 0)) || (sYear % 400 == 0)) {
       daysArray[2] = 29;
   } else {
       daysArray[2] = 28;
   }

   return daysArray[sMonth].toString();
} 

/*=========================================*
* 입력받은 날짜로부터 몇일 후의 날짜를 반환하기
*
* param : ObjDate객체, 일수, 결과Data객체
*
* return :
/*=========================================*
function calcDate(objDate,iDay,objResultDate) {
   daysArray = new makeArray(12); //월별 공간을 생성

   for(i=1; i<13; i++) {
       daysArray[i] = 30 + (i%2);
   }

   var sYear = objDate.value.substring(0, 4) * 1;
   var sMonth = objDate.value.substring(4, 6) * 1;
   var sDay    = objDate.value.substring(6, 8) * 1;

   daysArray[2] = lastDay(sYear + "02");

   var iMoveRemain = iDay * 1 + sDay;
   var iCurMonth = sMonth;
   var iCurYear    = sYear;

   while (iMoveRemain > daysArray[iCurMonth]) {
       iMoveRemain = iMoveRemain - daysArray[iCurMonth];
       iCurMonth = iCurMonth + 1;

       if (iCurMonth > 12) {
           iCurMonth = 1;
           iCurYear = iCurYear + 1;
           daysArray[2] = lastDay(iCurYear + "02");
       }
   } //end of while

   iCurMonth = addZero(iCurMonth.toString());
   iMoveRemain = addZero(iMoveRemain.toString());

   objResultDate.value = iCurYear + iCurMonth + iMoveRemain;
} 

-------------------------------문자--------------------------------
/*=========================================*
* 대소문자를 포함한 영문자인지 확인한다.
*
* param : sVal 입력문자열
*
* return : Boolean true이면 알파벳
/*=========================================*
function isAlpha(sVal)
{
  // Alphabet 값
  var sAlphabet="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  var iLen=sVal.length;   //입력값의 길이

  for(i=0;i<iLen;i++)
  {
   if(sAlphabet.indexOf(sVal.substring(i,i+1))<0)
   {
     alert("허용된 문자가 아닙니다.\n영문으로 입력해 주십시오.");   
     return false;
   }
  }
  return true; 
}

/*=========================================*
* 영문자와 숫자 구성된 문자열인지 확인
*
* param : sVal 입력문자열
*
* return : Boolean true이면 영문자,숫자로 구성된 문자열
/*=========================================*
function isAlphaNumeric(sVal)
{
  var sAlphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
  var iLen      = sVal.length;

  for ( i = 0; i < iLen; i++ )
  {
   if ( sAlphabet.indexOf(sVal.substring(i, i+1)) < 0 )
   {
     return false;
   } 
  }
  return true; 
}  


-----------------------------문자길이------------------------------
/*=========================================*
* 문자열의 길이를 return (한글:2자)
*
* param : sVal 입력문자열
*
* return : int 입력문자열의 길이
/*=========================================*
function strLength(sVal)
{
  var sBit = '';    // 문자열의 문자(Char)
  var iLen = 0; //문자열 길이

  for ( i = 0 ; i < sVal.length ; i++ )
  {
   sBit = sVal.charAt(i);
   if ( escape( sBit ).length > 4 )
   {
     iLen = iLen + 2;
   }
else
{
     iLen = iLen + 1;
   }
  }
  return iLen;
}


/*=========================================*
* 문자열 길이 체크
* param : str 필드객체, field 필드명
* return : boolean
/*=========================================*
function chkStrLength(str,field)
{
iSize = str.getAttribute("Maxlength")

if (field == null)
  field = '';

if ( strLength(str.value) > iSize)
{
//  if (flag=1)
  alert("입력가능한 "+field+" 최대길이는 영문/숫자일 때 "+iSize+"자, 한글일 때 "+Math.floor(iSize/2)+"자입니다.");
//  else
//   alert(field+" 최대길이는 "+iSize+"자 입니다.");
       str.select();
    str.focus();
  return false;
}

return true;
}

-------------------------------한글--------------------------------
/*=========================================*
* 한글이지 여부 체크
*
* param : sVal 입력문자열
*
* return : Boolean true이면 한글
/*=========================================*
function isHangul(sVal)
{
  var sBit = '';

  for(i=0;i<sVal.length;i++)
  {
   sBit = sVal.charAt(i);
   if(escape( sBit ).length <= 4)
   {
  alert("한글만 입력하십시오.");
     return false;
   }
  }
  return true;
}


-------------------------------주민--------------------------------
/*=========================================*
* 주민등록 여부를 확인한다.(내국인)
*
* param : sID 입력문자열(주민번호 13자리)
*
* return : Boolean true이면 적합한 주민번호
/*=========================================*
function isSocialNO(ssn)
{
var digit=0
   for (var i=0 ; i<ssn.length ; i++){
       var str_dig=ssn.substring(i,i+1);
       if (str_dig<'0' || str_dig>'9'){
           digit=digit+1
       }
   }
   if(digit>0)
   {
       return false;
   }
     
   var year   = parseInt(ssn.substring(0,2));
   var month  = parseInt(ssn.substring(3,4));
   var day    = parseInt(ssn.substring(5,6));
   var gender = parseInt(ssn.substring(7,7));
   var local  = parseInt(ssn.substring(8,11));
   var key    = parseInt(ssn.substring(12));
      
   if( (month<0) || (month>12) )
   {
       return false;
   }
      
   if( (month==1) || (month==3) || (month==5) || (month==7) || (month==8) || (month==10) || (month==12) )
   {
       if( (day<0) || (day>31) )
       {
           return false;
       }
   }

   if( (month==4) || (month==6) || (month==9) || (month==10) )
   {
       if( (day<0) || (day>30) )
       {
           return false;
       }
   }
      
   if(month==2)
   {
       if( (year==0) && ( (gender==1) || (gender==2) ) )
       {
           if( (day<0) || (day>28) )
           {
               return false;
           }
       }
       else if( (year==0) && ( (gender==3) || (gender==4) ) )
       {
           if( (day<0) || (day>29) )
           {
               return false;
           }
       }
       else if(year%4==0)
       {
           if( (day<0) || (day>29) )
           {
               return false;
           }              
       }
       else
       {
           if( (day<0) || (day>28) )
           {
               return false;
           }
       }
   }

   if( (gender<0) || (gender>4) )
   {
       return false;
   }

   cBit = 0;
   sCode="234567892345";

   for(i=0;i<12;i++)
   {
       cBit = cBit+parseInt(ssn.substring(i,i+1))*parseInt(sCode.substring(i,i+1));
   }

   cBit=11-(cBit%11);
   cBit=cBit%10;

   if(key!=cBit)
   {
  return false;
   }
   else
   {
       return true;
   }
}

/*=========================================*
* 주민등록 여부를 확인한다.(외국인)
*
* param : sID 입력문자열(주민번호 13자리)
*
* return : Boolean true이면 적합한 주민번호
/*=========================================*
function isFgnSocialNO(ssn) {
if ((ssn.charAt(6) == "5") || (ssn.charAt(6) == "6"))
{
   birthYear = "19";
}
else if ((ssn.charAt(6) == "7") || (ssn.charAt(6) == "8"))
{
   birthYear = "20";
}
else if ((ssn.charAt(6) == "9") || (ssn.charAt(6) == "0"))
{
   birthYear = "18";
}
else
{
  return false;


birthYear += ssn.substr(0, 2);
birthMonth = ssn.substr(2, 2) - 1;
birthDate = ssn.substr(4, 2);
birth = new Date(birthYear, birthMonth, birthDate);

if ( birth.getYear() % 100 != ssn.substr(0, 2) ||
  birth.getMonth() != birthMonth ||
  birth.getDate() != birthDate) {
 
  return false;
}

   var sum = 0;
   var odd = 0;
  
   buf = new Array(13);
   for (i = 0; i < 13; i++) buf[i] = parseInt(ssn.charAt(i));

   odd = buf[7]*10 + buf[8];
  
   if (odd%2 != 0) {
     return false;
   }

   if ((buf[11] != 6)&&(buf[11] != 7)&&(buf[11] != 8)&&(buf[11] != 9)) {
     return false;
   }
   
   multipliers = [2,3,4,5,6,7,8,9,2,3,4,5];
   for (i = 0, sum = 0; i < 12; i++) sum += (buf[i] *= multipliers[i]);


   sum=11-(sum%11);
  
   if (sum>=10) sum-=10;

   sum += 2;

   if (sum>=10) sum-=10;

   if ( sum != buf[12]) {
       return false;
   }
   else {
       return true;
   }
}

/*=========================================*
* 숫자 0으로 초기화 된 1차원 배열을 생성한다.
*
* param : iSize 배열 크기
*
* return : this 배열
/*=========================================*
function makeArray(iSize)
{
  this.length = iSize;

  for (i = 1; i <= iSize; i++)
  {
   this[i] = 0;
  }
  return this;
}

/*=========================================*
* 숫자 분리자(,)(.)가 있는 숫자이거나 일반숫자형태인지 검사한다.
*
* param : sVal
*
* return : Boolean
/*=========================================*
function isMoneyNumber(sVal)
{   
  var iAbit;

  if (sVal.length < 1) return true;
  for (i=0; i<sVal.length; i++)
  {
   iAbit = parseInt(sVal.substring(i,i+1));
   if (!(('0' < iAbit) || ('9' > iAbit)))
   {
     if (sVal.substring(i, i+1) == ',' || sVal.substring(i, i+1) == '.' )
     {
     }
     else
     {
       return false;
     }
   }
  }
  return true;
}

/*=========================================*
* 숫자 분리자(,)만 있는 숫자이거나 일반숫자형태인지 검사한다.
*
* param : sVal
*
* return : Boolean
/*=========================================*
function isMoneyNumber2(sVal)
{   
  var iAbit;

  if (sVal.length < 1) return true;
  for (i=0; i<sVal.length; i++)
  {
   iAbit = parseInt(sVal.substring(i,i+1));
   if (!(('0' < iAbit) || ('9' > iAbit)))
   {
     if (sVal.substring(i, i+1) == ',')
     {
     }
     else
     {
       return false;
     }
   }
  }
  return true;
}

/*=========================================*
* 숫자 분리자(.)만 있는 숫자이거나 일반숫자형태인지 검사한다.
* param : sVal
* return : Boolean
/*=========================================*
function isMoneyNumber3(sVal)
{   
  var iAbit;
  var deci_cnt = 0;
  if (sVal.length < 1) return true;
  for (i=0; i<sVal.length; i++)
  {
   iAbit = parseInt(sVal.substring(i,i+1));
   if (!(('0' < iAbit) || ('9' > iAbit)))
   {
     if (sVal.substring(i, i+1) == '.' )
     {
   deci_cnt = deci_cnt + 1;//소수점 이하가 있는지 파악 (1이면 소수점 이하 존재)
     }
     else
     {
       return false;
     }
   }
  }
  if (deci_cnt > 1)
  {
  return false;
  }
  return true;
}
/*=========================================*
* 숫자 분리자(.)만 있는 숫자인지 검사한다.
*
* param : sVal
*
* return : Boolean
/*=========================================*
function isMoneyNumber4(sVal){   
  var deci_cnt = 0;
  for (i=0; i<sVal.length; i++)
  {
  
     if (sVal.substring(i, i+1) == '.' ){
   deci_cnt = deci_cnt + 1;//소수점있는지여부
     }
 
  }
  if (deci_cnt > 0)
  {
  return true;
  }
  return false;
}


/*=========================================*
* 소수점이 있는 숫자이면서 정해진 자릿수에 맞는 형식인지 확인한다. 
* param : sVal 입력객체, iSize1 정수자릿수, iSize2 소수자릿수
* return : boolean
/*=========================================* 
function isMoneyNumber5(sVal, iSize1, iSize2)
{
if(isMoneyNumber(sVal))  // ,나 .가 들어가는 숫자인지 확인
{
  var e = sVal.value;
  e = e.split(".");
    e[0] = numOffMask(e[0]);
  if (!e[1]) {
  e[1] = 0;     
  } 
 
  var aVal = e[0] + "." + e[1];

  if (isNumberDot(aVal)) {
  // 입력된 값이 설정된 정수자릿수 또는 소숫점 이하보다 크면 false
  if (e[0].length > iSize1 || e[1].length > iSize2)
   return false;
  else
   return true;
  }
  else {
     return false;
  }

}
else {
  return false;
}
}


/*=========================================*
* 소수점 숫자표현(소수점 위의 3자리마다 "," 맞춤)
* param : val
*
* return : String
/*=========================================*
function getMoneyType(val)
{
  if (typeof val == "number")
  {
   val = val.toString();
  }

  var value = getOnlyNumberDot(val);

  var sResult = "";

  if (value.length == 0)
  {
   alert("숫자만 입력하십시오.");
   return;
  }

  if (! isMoneyNumber(value))
  {
   alert("숫자만 입력하십시오.");
   return;
  }

  var nI;
  var nJ = -1;
  var subOne;
  var flag = false;

  for (nI = value.length - 1; nI >= 0; nI--)
  {
   subOne = value.substring(nI, nI + 1);
   sResult = subOne + sResult;


if (subOne == '.')
{
  flag = true;
}

if (flag == true)
{
  nJ = nJ + 1;
}

   if ((nJ % 3 == 0) && (nI != 0) && (nJ != 0))
   {
     sResult = "," + sResult;
   }
  }
  return sResult;
}

/*=========================================*
* 부호가 있는 소수점 숫자표현(소수점 위의 3자리마다 "," 맞춤)
*
* param : val
*
* return : String
/*=========================================*
function getSignMoneyType(val)
{
  if (typeof val == "number")
  {
  val = val.toString();
  }

  var s1 = val.substring(0,1);
  var slen = val.length;
  var sign = "";
  var ret  = "";
  if (val == "-Infinity")
  {
  return "0";
  }

  if(slen>1 )
  {
   if(s1 == "-")
   {
     sign = "-";
     ret = sign + getMoneyType(val.substring(1,slen));
    }
    else
    {
      ret = getMoneyType(val);
    }
  }
  else
  {
    ret = val;
  }
  return  ret;
}

/*=========================================*
* 콤마를 제거한 숫자형태 문자열로 반환(부호와 소수점도 없앰)
*
* param : val
*
* return : String
/*=========================================*
function getOnlyNumber(val)
{   
  var value = "";
  var abit;

  if (typeof val != "number" && typeof val !="string")
  {
   return "0";
  }
  if (val.length < 1)
  {
   return "0";
  }
  if (val == "NaN")
  {
   return "0";
  }
  if (val == "-Infinity")
  {
   return "0";
  }
  
  for (i=0;i<val.length;i++)
  {
   abit = parseInt(val.substring(i,i+1));
   if (('0' < abit) || ('9' > abit) )
   {
     value = value + abit;
   }

  }
  return value;
}


/*=========================================*
* 콤마를 제거한 숫자형태 문자열로 반환(부호, 소수점 그대로)
*
* param : val
*
* return : String
/*=========================================*
  function getOnlyNumberDot(val)
  {   
 
  if (typeof val != "number" && typeof val !="string")
  {
   return "0";
  }
  if (val.length < 1)
  {
   return "0";
  }
  if (val == "NaN")
  {
   return "0";
  }
  if (val == "-Infinity")
  {
   return "0";
  }
 
  var value = "";
  var abit; // 소수부분
 
  var delimter = val.indexOf(".");
  var numberInteger = ""; // 정수부분
 
  if(delimter < 0) {
   numberInteger = val;
   abit ='';
  } else {
   numberInteger = val.substring(0,delimter);
   abit = val.substring(delimter+1);
  }
 
  var number="";
  var leng=numberInteger.length ;
  for(i=0 ; i<leng ; i++)
  {
   var tmp = numberInteger.substring(i,i+1);
   if(tmp != ",")
   {
    number = number+tmp;
   }
  }
 
  if(abit.length==0)
  {
   value=number;
  }
  else
  {
   value = number+"."+abit;
  }
  return value;
 
  }


/*=========================================*
* 콤마를 제거한 부호가 있는 숫자형태 문자열로 반환
*
* param : val
*
* return : String
/*=========================================*
function getOnlySignNumber(val)
{
  if (val == "-") return 0;
  var price = eval(getOnlyNumber(val));
  if (val.substring(0,1) == "-")
  {
   price *= -1;
  }
  return price;
}


/*=========================================*
* EMedit 날짜 사용시 입력 체크
*
* param : emEditObj
*
* return : boolean
/*=========================================*
function emEditYMD(emEditObj)
{
  if(MTrim(emEditObj.Text) != "")
  {
      if(MTrim(emEditObj.Text).length != 8 && MTrim(emEditObj.Text).length > 0)
      {
        alert('일자를 모두 입력하십시오.');
            emEditObj.SelectAll = "true";
   emEditObj.focus();
            return false;
      } 
  }
    return;
}


/*=========================================*
* 그리드에서 날짜 입력 시 유효성 체크
*
* param : emEditObj
*
* return : boolean
/*=========================================*
function emEditYMD_grid(sVal)
{
    sVal = MTrim(sVal);

   if (isDateYMD(sVal)) return true;
   else                 return false;
}


/*=========================================*
* 조회조건 시작일과 종료일 입력 유효성 확인 - 컨트롤 이용
*
* param : objFrom, objTo
*
* return : boolean
/*=========================================*
function chkPeriod_Emedit(objFrom, objTo)
{
if (!isDate(objFrom.Text))
{
  objFrom.focus();
  return false;
}
else if (!isDate(objTo.Text))
{
  objTo.focus();
  return false;
}
else if (objFrom.Text > objTo.Text)
{
  alert("마지막일이 시작일보다 작습니다.");
  objFrom.focus();
  return false;
}
return true;
}


/*=========================================*
* 앞뒤 공백을 제거한다.
*
* param : sVal
*
* return : String
/*=========================================*
function Trim(sVal)
{
  return(LTrim(RTrim(sVal)));
}

/*=========================================*
* 앞 공백을 제거한다.
*
* param : sVal
*
* return : String
/*=========================================*
function LTrim(sVal)
{
  var i;
  i = 0;
  while (sVal.substring(i,i+1) == ' ')
  {
   i++;
  }
  return sVal.substring(i);
}

/*=========================================*
* 뒤 공백을 제거한다.
*
* param : sVal
*
* return : String
/*=========================================*
function RTrim(sVal)
{
  var i = sVal.length - 1;
  while (i >= 0 && sVal.substring(i,i+1) == ' ')
  {
   i--;
  }
  return sVal.substring(0,i+1);
}


//------------------------------------------------------------------------------
// DESCRIPTION  : 공백문자 제거
// 함수명       : MTrim(공백이 있는 문자열)
// Return Value : 공백이 제거된 문자열
//------------------------------------------------------------------------------
function MTrim(sVal){
var strOri = sVal;
var space = " ";
 
while (strOri.indexOf(space) != -1){
  strOri = strOri.replace(space, "");
}

return strOri;
}

/*=========================================*
* 공백만 존재하거나 아무것도 없는지 확인한다.
*
* param : sVal
*
* return : boolean (true이면 공백이나 Empty이다)
/*=========================================*
function isEmpty(sVal){
  if (MTrim(sVal) == '')
  {
   return true;
  }
  return false;
}

/*=========================================*
* 현재 컨트롤과 MaxLength 받아서 MaxLength 되면 다음 컨트롤로 이동
*
* param : objCurrent, objNext
*
* return :
/*=========================================*
function focusMove(objCurrent, objNext)
{
  if ( objCurrent.getAttribute("Maxlength") == objCurrent.value.length)
  {
   objNext.focus();
  }
}

/*=========================================*
* 현재 컨트롤과 MaxLength 받아서 MaxLength 되면 다음 컨트롤로 이동(선택)
* param : objCurrent, objNext
* return :
/*=========================================*
function focusMoveSelect(objCurrent, objNext)
{
  if ( objCurrent.getAttribute("Maxlength") == objCurrent.value.length)
  {
   objNext.focus();
   objNext.select();
  }
}


/*=========================================*
* 완료된 날짜값에 대해 "/" 추가
* param : me(value)
* return : String
/*=========================================*
function calOnMask(me){

if (event.keyCode<48||event.keyCode>57){//숫자외금지
    event.returnValue=false;
}
if(me.length > 3 ) {
  var a1 = me.substring(0,4) + "/";
  var a2 = me.substr(4,me.length);
  var a3 = "";
  if (me.length > 5){
  a2 = me.substring(4,6) + "/";
  a3 = me.substr(6,me.length);
  }

  me= a1 + a2 + a3;
 
}
return me;
}


/*=========================================*
* 날짜값 "/" 제거
* param :  me(value)
* return : String "/" 제거된 날짜값
/*=========================================*
function calOffMask(me){
var tmp=me.split("/");
tmp=tmp.join("");
return tmp;
}


/*=========================================*
* 날짜값 자동 "/" 붙임.(완성된 날짜값에 대해 /붙임)
*
* param :
*
* return :
/*=========================================*
function cal_value2(me){

  if(me.length == 8 ) {
  var a1 = me.substring(0,4) + "/";
  var a2 = me.substring(4,6) + "/";
  var a3 = me.substr(6,me.length);
 
  me= a1 + a2 + a3;
 
}
return me;
}


/*=========================================*
* 오늘 날짜 생성 ( "/" 붙여서 리턴)

* param :
*
* return : todate
/*=========================================*
function todate() {
var now=new Date()
var jyear = now.getYear();
var month=now.getMonth() + 1;
var jmonth = month + "";
if (jmonth.length < 2) {
  jmonth = "0" + jmonth;
}
var dat=now.getDate();
var jdate = dat + "";
if (jdate.length < 2) {
  jdate = "0" + jdate;
}

//var day=Birdy.getDay()//요일
   var tdy = jyear+"/"+jmonth+"/"+jdate;
return tdy;
}


/*--------------------------------------------------------------------------------------------
Spec   : 숫자입력시 3자리마다 자동으로 콤마 찍기
Argument : string
Return   : string
Example  : onkeyup="comma_value(this)"
---------------------------------------------------------------------------------------------*/
function comma_value(sval)
{
   if (event.keyCode != 9)
   {
       var cur = sval.value;
       var setMinus = 0;

       if (cur.charAt(0) == "-") {
           setMinus = 1;
       }

       cur=cur.replace(/[^.0-9]/g ,"");
       cur=cur.replace(/[.]+/g ,".");

       if (setMinus == 1)
           sval.value = "-" + formatNumbertoString(cur);
       else
           sval.value = formatNumbertoString(cur);
   }
}


/*--------------------------------------------------------------------------------------------
Spec   : 숫자입력시 3자리마다 자동으로 콤마 찍기
Argument : string
Return   : string
Example  : onkeyup="comma_value(str)"
---------------------------------------------------------------------------------------------*/
function formatNumbertoString(cur)
{
   leftString = cur;
   rightString = ".";
   dotIndex = 0;
    
   for(i = 0; i < cur.length; i++){
    // 1) '.'이 처음에 입력 되었을때 앞에 0을 더해 "0."을 리턴
  // 2) "0."이외의 입력 일 때 "0"만 리턴
    if(cur.charAt(i) == "." || (cur.length > 1 && cur.charAt(0) == "0" && cur.charAt(1) != "."))
  {
     dotIndex = i;
     if(dotIndex == 0)
  {
               if   (cur.charAt(0) == ".")   leftString="0.";
               else                          leftString="";
      return leftString;
     }
     break;
    }
   }
  
    if(dotIndex != 0) //dot가 있을 경우..
   {
    leftString = cur.substr(0, dotIndex);
    rightString = cur.substr(dotIndex+1);
    rightString = rightString.replace(/\./g,"");
   }
   else //없으면..
   {
    leftString = cur;
   }

   len=leftString.length-3;
   while(len>0)
   {
       leftString=leftString.substr(0,len)+","+leftString.substr(len);
       len-=3;
   }          
  
   if(rightString != ".")
       return (leftString + "." + rightString);
   else
       return leftString;
}

// 숫자만 입력 (소수점 허용, 음수 허용)
// 사용법 : onKeyPress = onlyNum();
function onlyNum()
{
if (event.keyCode < 45 || event.keyCode > 57 || event.keyCode == 47)
  event.returnValue = false;
}

// 숫자만 입력 (소수점 허용, 음수 불가)
// 사용법 : onKeyPress = onlyNum2();
function onlyNum2()
{
if (event.keyCode < 46 || event.keyCode > 57 || event.keyCode == 47)
  event.returnValue = false;
}

// 숫자만 입력 (소수점 불가, 음수 허용)
// 사용법 : onKeyPress = onlyNum3();
function onlyNum3()
{
if (event.keyCode < 45 || event.keyCode > 57 || event.keyCode == 46 || event.keyCode == 47) 
  event.returnValue = false;
}

// 숫자만 입력 (소수점 불가, 음수 불가)
// 사용법 : onKeyPress = onlyNum4();
function onlyNum4()
{
if (event.keyCode < 48 || event.keyCode > 57)
  event.returnValue=false;
}


function onlyChar(sval)
{
var sBit = '';
str = sval.value;

for(i=0;i<str.length;i++)
{
  sBit = str.charAt(i);
 
  if(escape( sBit ).length <= 4)
    {
  var sAlphabet="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
 
  if(sAlphabet.indexOf(sBit) < 0)
     {
   alert("영문 또는 한글만 입력해 주십시오.");   
   return false;
  }
  }
}
return true;
}


/*=========================================*
* 입력완료된 숫자값에 대하여 콤마를 찍어줄때 사용(소수점 이하 처리 안됨)
* 콤마 형식을 사용할 경우에는 onkeyup이벤트로 사용하기 바라며,
* 다음의 펑션을 호출할때는 comma_value(me) 펑션을 호출하기 바람.
* param : value
/*=========================================*
function numOnMask(me){
var tmpH = null;
if(me.charAt(0)=="-"){//음수가 들어왔을때 '-'를 빼고적용되게..
  tmpH=me.substring(0,1);
  me=me.substring(1,me.length);
} //me.indexOf('-')
  if(me.length > 3){
  var c=0;
  var myArray=new Array();
    for(var i=me.length;i>0;i=i-3){
      myArray[c++]=me.substring(i-3,i);
    }
    myArray.reverse();
    me=myArray.join(",");
  }
  if(tmpH){
   me=tmpH+me;
  }
return me;
}

/*=========================================*
* 콤마가 들어간 숫자에서 ","를 뺀다.
* param : value
/*=========================================*
function numOffMask(me){
    var tmp=me.split(",");
     tmp=tmp.join("");
    return tmp;
}

// 입력 완료된 숫자 값에 컴마를 적용하여준다(소수점 이하는 "," 안 붙음)
// return : String
function numOnMask2(me){
  var tmpH;
if(!isMoneyNumber4(me)) {
  if(me.charAt(0)=="-"){//음수가 들어왔을때 '-'를 빼고적용되게..
   tmpH=me.substring(0,1);
   me=me.substring(1,me.length);
  } //me.indexOf('-')
  if(me.length > 3){
   var c=0;
   var myArray=new Array();
   for(var i=me.length;i>0;i=i-3){
     myArray[c++]=me.substring(i-3,i);
   }
   myArray.reverse();
   me=myArray.join(",");
   }
   if(tmpH){
   me=tmpH+me;
   }
}else{
  var e = me;
  e = e.split(".");
  var myStr = e[0];
  //alert(myStr);
  if(myStr.charAt(0)=="-"){//음수가 들어왔을때 '-'를 빼고적용되게..
   tmpH=myStr.substring(0,1);
   myStr=myStr.substring(1,me.length);
  } //me.indexOf('-')
  if(myStr.length > 3){
   var c=0;
   var myArray=new Array();
   for(var i=myStr.length;i>0;i=i-3){
     myArray[c++]=myStr.substring(i-3,i);
   }
   myArray.reverse();
   myStr=myArray.join(",");
   }
   if(tmpH){
   me=tmpH+myStr+"."+e[1];
   }
   else {
   me=myStr+"."+e[1];
   }
}

return me;
}


// 입력 완료된 숫자 값에 컴마를 적용하고 소수점 이하는 삭제한다
// return : String
function numOnMask3(me){ //단순히 값에 컴마를 적용할때 사용
var tmpH;
if(isMoneyNumber3(me)) { // 양수&음수 체크 (true : 양수, false : 음수)
  var e = me;
  e = e.split(".");
  var myStr = e[0];
  if(myStr.length > 3){
  var c=0;
  var myArray=new Array();
  for(var i=myStr.length;i>0;i=i-3){
    myArray[c++]=myStr.substring(i-3,i);
  }
  myArray.reverse();
  myStr=myArray.join(",");
  }
  me = myStr;
}else{ // 음수 일때
  var e = me;
  e = e.split(".");
  var myStr = e[0];
  if(myStr.charAt(0)=="-"){//음수가 들어왔을때 '-'를 빼고적용되게..
  tmpH=myStr.substring(0,1);
  myStr=myStr.substring(1,me.length);
  }
  if(myStr.length > 3){
  var c=0;
  var myArray=new Array();
  for(var i=myStr.length;i>0;i=i-3){
    myArray[c++]=myStr.substring(i-3,i);
  }
  myArray.reverse();
  myStr=myArray.join(",");
  }
  if(tmpH){
  me=tmpH+myStr;
  }
  else {
  me=myStr;
  }
}

return me;
}


/*=========================================*
* 입력값을 소수점 이하 몇 자리까지 보여줄지 정한다. 
* 소수점 이하 자리수가 입력된 값보다 작으면 0으로 채운다.
* param : sVal 입력스트링, iSize 소수자릿수
* return : String
/*=========================================* 
function numOnMask4(sVal,iSize)
{
if(isNumberDot(sVal))  // 숫자형인지 확인
{
  var e = sVal;
  e = e.split(".");
  if (!e[1]) {  
  if (iSize == 0) {
      sVal = numOnMask(e[0]);
   return sVal;
  }
  else {
   e[1] = "0";
  }
  }
  while (e[1].length < iSize) {    // 주어진 소숫점 이하 자릿수 만큼 뒤에 "0" 추가
     e[1] = e[1] + "0";
  }
  sVal = numOnMask(e[0]) + "." + e[1].substr(0,iSize);
  return sVal;
}
else {
  return false;
}
}


/*=========================================*
* 입력값에 마스킹을 적용한다.(소수점 이하와 부호를 삭제하고 콤마추가)
* param : sVal 입력스트링
* return : String
/*=========================================* 
function numOnMask5(sVal)
{
var e = sVal;
e = e.split(".");

if(!isMoneyNumber3(e[0]))    // true이면 양수, false이면 음수
  e[0] = e[0].substring(1)

return numOnMask(e[0]);
}


/*=========================================*
* 입력값에 마스킹을 적용한다.(부호를 삭제하고 콤마추가. 소수점은 그대로 둠)
* param : sVal 입력스트링
* return : String
/*=========================================* 
function numOnMask6(sVal)
{
var e = sVal;
e = e.split(".");

if(!isMoneyNumber3(e[0]))  // isMoneyNumber3 - true이면 양수, false이면 음수
  e[0] = e[0].substring(1);

return numOnMask(e[0]) + "." + e[1];
}


/*=========================================*
* 숫자 외의 값이 입력되어있으면 false 리턴
* param : sval (object)
* return :
/*=========================================* 
function onlyNumber(sval) {
var strVal = sval.value

if (strVal.length < 1) {
    return false;
}

strVal = numOffMask(strVal);
var result = isNumberDot(strVal);
if (!result) {
    //alert("숫자만 입력 가능합니다.");
  sval.focus();
  return false;
}
}


/*=========================================*
* 특수문자 값이 입력되었는지 체크(특수문자가 있으면 false 리턴)
* param : sval (object)
* return :
/*=========================================* 
function chkValidChar(sval) {
   var re = new RegExp("[%\']","ig");
   var retVal = re.test(sval.value);

   if (retVal == true)
   {
       alert("검색어에 다음 문자를 사용할 수 없습니다 : \n\n              %    \' ");
       return false;
   }
   else
       return true;
}


/*=========================================*
*
* 윈도우 오픈1 (사용자 지정 위치생성)
* param : wUrl  지정url
* param : wTitle 지정타이틀
* param : wTop  지정 창 높이정렬기준
* param : wLeft 지정 창 왼쪽정렬기준
* param : wWidth 창넓이
* param : wHeight 창높이
* param : wSco  스크롤바 생성유무, 1:생성 0:비생성
/*=========================================*
function win_open(wUrl,wTitle,wTop,wLeft,wWidth,wHeight,wSco) {
window.open(wUrl,wTitle,"top="+wTop+",left="+wLeft+",width="+wWidth+",height="+wHeight+",scrollbars="+wSco);
}

/*=========================================*
*
* 윈도우 오픈2 (무조건 가운데 생성)
* param : wUrl  지정url
* param : wTitle 지정타이틀
* param : wWidth 창넓이
* param : wHeight 창높이
* param : wSco  스크롤바 생성유무, 1:생성 0:비생성
/*=========================================*
function win_open2(wUrl,wTitle,wWidth,wHeight,wSco) {
var top_po = (screen.availHeight/2) - (wHeight/2);
var left_po = (screen.availWidth/2) - (wWidth/2);
//alert(top_po +" "+left_po+ " "+wHeight+" "+wWidth);
window.open(wUrl,wTitle,"top="+top_po+",left="+left_po+",width="+wWidth+",height="+wHeight+",scrollbars="+wSco);
}
/*=========================================*
*
* 윈도우 오픈3 (무조건 전체 생성)
* param : wUrl  지정url
* param : wTitle 지정타이틀
* param : wWidth 창넓이
* param : wHeight 창높이
* param : wSco  스크롤바 생성유무, 1:생성 0:비생성
/*=========================================*
function win_open3(wUrl,wTitle) {
var wWidth = screen.availWidth;
var wHeight = screen.availHeight;

window.open(wUrl,wTitle,"top=0,left=0,width="+wWidth+",height="+wHeight+",scrollbars=0");

}


/***********************************
* 고객번호 및 계좌번호
************************************/

function cust_set_num(sval) {//고객번호 5자리 세팅
var cust_val = sval.value;
if (cust_val == "") return;

var cust_length=cust_val.length;
if (cust_length < 5) {
  for (var i = 0; i < (5 - cust_length); i++) {
  cust_val = "0" + cust_val;
  }
  sval.value = cust_val;
}
}

function cust_key_num(sval,obj) {
if (event.keyCode<48||event.keyCode>57){//숫자외금지
    event.returnValue=false;
}
if (sval.length == 5) {
  obj.focus();
  obj.select();
}
}

function acnt_set_num(sval,obj) {//계좌번호 2자리 세팅
var acnt_val = sval.value;
var acnt_length = acnt_val.length;
if (obj.value == "") return;
if (acnt_val == "") acnt_length = 0;

if (acnt_length < 2) {
  for (var i = 0; i < (2 - acnt_length); i++) {
  acnt_val = "0" + acnt_val;
  }
  sval.value = acnt_val;
}
}

function acnt_key_num() {
if (event.keyCode<48||event.keyCode>57){//숫자외금지
    event.returnValue=false;
}
}

function rdo_val(sval) {
// 이펑션은 체크박스와 옵션버튼의 활성화 비활성화에 사용
if (sval.checked == true) {
  sval.checked = false;
}else {
  sval.checked = true;
}
}


function disp_err(sval) {
   ErrMsgForm.errMsg.value = sval;
   window.open("/err_msg.screen","에러메세지","top=300px,left=310px,height=300px,width=500px,resizable=0,scrollable=1");
}

function disp_err1(sval) {
   ErrMsgForm.errMsg.value = sval;
   window.open("/err_msg1.screen","에러메세지","top=300px,left=310px,height=300px,width=500px,resizable=0,scrollable=1");
}


/**
* 두 날짜에 며칠 차이나는지 구함
* from_val이 to_val보다 크면 -붙여서 리턴
*/
function getDayInterval(from_val,to_val) {
   var day   = 1000 * 3600 * 24; //24시간
if(isDate(from_val)==false)
{
  return;
}
if(isDate(to_val)==false)
  return;

var from_date=toTimeObject(from_val);
var to_date=toTimeObject(to_val);
var day_interval=parseInt((to_date - from_date) / day, 10);
   //alert(to_date+" - "+from_date+"="+day_interval);
return day_interval;
}


/**
* Time 스트링을 자바스크립트 Date 객체로 변환
* parameter time: Time 형식의 String
*/
function toTimeObject(time) { //parseTime(time)
   var year  = time.substr(0,4);
   var month = time.substr(4,2) - 1; // 1월=0,12월=11
   var day   = time.substr(6,2);

   return new Date(year,month,day);
}


// readonly나 disabled로 막힌 경우를 제외하고 tabindex 값을 지정하여 입력박스 순서대로 이동
function tabIndexing()
{
   elements = document.all;
   for (i=0;i<elements.length ;i++)
   {
       if(elements[i].readOnly == false){
          elements[i].tabIndex = i;
       }
   }
}


/*=========================================*
* 조회버튼 클릭시 고객번호/계좌번호 입력 여부 확인
* param : obj1 고객번호, obj2 계좌번호, field 필드명
* return : boolean
/*=========================================*
function chkCustNoAcntNo(obj1, obj2, field)
{
if (field == null)  field = '';
   obj1.value = MTrim(obj1.value);
   obj2.value = MTrim(obj2.value);

if (obj1.value.length == 0 && obj2.value.length == 0)
{
       return true;
   }
   else if (obj1.value.length == 0 && obj2.value.length != 0)
{
       alert(field+" 번호를 입력하십시오.");
       obj1.select();
    obj1.focus();
  return false;
}
   else if (obj1.value.length != 0 && obj2.value.length == 0)
{
       alert(field+" 번호를 입력하십시오.");
       obj2.select();
    obj2.focus();
  return false;
}

return true;
}


function win_open_BuzPwd()
{
   var return_value = window.showModalDialog("checkPwd.screen", "", "dialogHeight: 100px; dialogWidth: 306px; edge: Raised; center: Yes; help: No; resizable: No; status: No; scroll:0;");
   return return_value;
}


function win_open_BuzPwdWithManagerPwd()
{
   var return_value = window.showModalDialog("COLO0106mc_00.do", "", "dialogHeight: 114px; dialogWidth: 336px; edge: Raised; center: Yes; help: No; resizable: No; status: No; scroll:0;");
   return return_value;
}

// return 값 없는 경우
function submain_popup(pUrl, urlHeight, urlWidth)
{
   //parent.stopTimer();
   var returnCode = window.showModalDialog("submain_popup.screen", pUrl, "dialogHeight: "+urlHeight+"px; dialogWidth: "+urlWidth+"px; edge: Raised; center: Yes; help: No; resizable: Yes; status: No;");
   parent.startTimer();
   if(returnCode=='n')
   {
       parent.logout();
   }
   else if(returnCode=='timerlogout')
   {
       parent.timer_logout();
   }

   return;
}

// return 값이 String인 경우
function submain_popup2(pUrl, urlHeight, urlWidth)
{
   //parent.stopTimer();
   var returnCode = window.showModalDialog("submain_popup2.screen", pUrl, "dialogHeight: "+urlHeight+"px; dialogWidth: "+urlWidth+"px; edge: Raised; center: Yes; help: No; resizable: Yes; status: No;");
   //parent.startTimer();
   if(returnCode=='n')
   {
       parent.logout();
   }
   else if(returnCode=='timerlogout')
   {
       parent.timer_logout();
   }
   else if (typeof(returnCode) == "undefined")
   {
    return 'undefined';
   }
   else
   {
    return returnCode;
   }
}

// 파라미터로 window 객체 사용
function submain_popup3(pUrl, urlHeight, urlWidth)
{
   //parent.stopTimer();
   var returnCode = window.showModalDialog("submain_popup3.screen?pUrl="+pUrl, window, "dialogHeight: "+urlHeight+"px; dialogWidth: "+urlWidth+"px; edge: Raised; center: Yes; help: No; resizable: Yes; status: No;");
   //parent.startTimer();

   if (typeof(returnCode) == 'object')
   {
       return returnCode;
   }
   else
   {
       if(returnCode =='n')
       {
           parent.logout();
       }
       else if(returnCode=='timerlogout')
       {
           parent.timer_logout();
       }
       else if (typeof(returnCode) == "undefined")
       {
           return 'undefined';
       }   
       else
       {
        return returnCode;
       }
   }
}


// 파라미터로 window 객체를 사용하면서 return 값이 Object
function submain_popup4(pUrl, urlHeight, urlWidth)
{
   //parent.stopTimer();
   var returnCode = window.showModalDialog("submain_popup4.screen?pUrl="+pUrl, window, "dialogHeight: "+urlHeight+"px; dialogWidth: "+urlWidth+"px;center:Yes; help:No; resizable:Yes; status:No; scroll:Yes;");
   //parent.startTimer();

   if (typeof(returnCode) == 'object')
   {
       return returnCode;
   }
   else
   {
       if(returnCode=='n')
       {
           parent.logout();
       }
       else if(returnCode=='timerlogout')
       {
           parent.timer_logout();
       }
       else if (typeof(returnCode) == "undefined")
       {
           return 'undefined';
       }
       else
       {
           return returnCode;
       }
   }
}

// parameter로 Object를 사용
function submain_popup5(pUrl, urlHeight, urlWidth, obj)
{
   //parent.stopTimer();
   var returnCode = window.showModalDialog("submain_popup5.screen?pUrl="+pUrl, obj, "dialogHeight: "+urlHeight+"px; dialogWidth: "+urlWidth+"px; edge: Raised; center:Yes; help:No; resizable:Yes; status:No;");
   //parent.startTimer();

   if (typeof(returnCode) == 'object')
   {
       return returnCode;
   }
   else
   {
       if(returnCode=='n')
       {
           parent.logout();
       }
       else if(returnCode=='timerlogout')
       {
           parent.timer_logout();
       }
       else if (typeof(returnCode) == "undefined")
       {
           return 'undefined';
       }
       else
       {
           return returnCode;
       }
   }
}


function start_timer()
{
// if ( opener==null )
// {
//  parent.startTimer();
//  return;
// }
// else
// {
//     opener.start_timer();
//     return;
// }
}

by Andy | 2007/09/14 16:55 | study | 트랙백

◀ 이전 페이지다음 페이지 ▶