/**
* Ajax를 이용한 요청을 수행한다.
*
* @url 요청 URL로 상대 경로와 절대 경로가 모두 가능함
* @params 요청 파라미터
* @theMode 모드로 호출할 메소드의 이름을 의미함. IAction에 대한 요청인 경우에는 ""를 입력
* @after 서버에서의 처리가 완료된 후에 호출되는 메소드
*/
function callAjax(url, params, theMode, after) {
jprivate_callMethod = after;
jprivate_mode = theMode;
url += "?mode=" + theMode + "&" + params;
// 웹 브라우저에 따른 분기
if (window.ActiveXObject) { /* MS IE */
jprivate_request = new ActiveXObject("Microsoft.XMLHTTP");
jprivate_request.onreadystatechange = jprivate_process;
jprivate_request.open("GET", url, true);
jprivate_request.send();
}
else if (window.XMLHttpRequest) { /* 모질라 계열 */
jprivate_request = new XMLHttpRequest();
jprivate_request.onreadystatechange = jprivate_process;
jprivate_request.open("GET", url, true);
jprivate_request.send(null);
}
var style = "font: 12px 굴림, Tahoma, sans-serif;";
style += "position: absolute; top: 6%; right: 5%;";
style += "color: #fff; background-color: #008aff;";
jprivate_message = document.createElement("div");
jprivate_body = document.getElementsByTagName("body")[0];
if (jprivate_body) {
jprivate_message.innerHTML = "작업중입니다...";
jprivate_body.appendChild(jprivate_message);
}
}
/**
* 서버에서 Ajax 요청이 처리가 된 후 호출되는 메소드로 간단한 에러 처리를 한다. 성공적으로 수행된 경우에는
* 사용자가 지정한 callMethod를 호출한다.
*/
function jprivate_process() {
try {
if (jprivate_request.readyState == 4) {
if (jprivate_body) {
jprivate_body.removeChild(jprivate_message);
}
if (jprivate_request.status == 200) {
jprivate_callMethod(jprivate_request, jprivate_mode);
} else {
alert("예외가 발생하였습니다. (메시지=" + jprivate_request.statusText + ")");
}
}
} catch (e) {
alert("예외가 발생하였습니다. (메시지=" + e.message + ")");
}
}
function getParams(select, name) {
var size = select.options.length;
var result = "";
for (var i = 0; i < size; i++) {
if (select.options[i].selected) {
result += "&" + name + "=" + select.options[i].value
}
}
return result;
}
/**
* item 태그의 내용을 나타내는 클래스
*
* @param id 아이디
* @param properties 속성 리스트
*/
function JItem(id, properties) {
this.id = id;
this.properties = properties;
this.getProperty = function(name) {
return properties[name];
};
}
/**
* id에 해당하는 item 태그의 내용을 JItem 객체로 반환한다.
*
* @param element response 태그를 나타내는 DOM 객체
* @param id 아이디. 아이디가 없는 경우에는 첫번째 item 태그가 반환된다.
*/
function getItem(element, id) {
var items = element.getElementsByTagName("item");
for (var i = 0; i < items.length; i++) {
if (id == null || items[i].getAttribute("id") == id) {
var properties = items[i].getElementsByTagName("property");
var args = new Array;
for (var j = 0; j < properties.length; j++) {
args[properties[j].getAttribute("name")] = properties[j].getAttribute("value");
}
return new JItem(id, args);
}
}
return;
}
/**
* id에 해당하는 list 태그의 내용을 JItem 객체를 담고 있는 배열로 반환한다.
*
* @param element response 태그를 나타내는 DOM 객체
* @param id 아이디. 아이디가 없는 경우에는 첫번째 list 태그가 반환된다.
*/
function getList(element, id) {
var lists = element.getElementsByTagName("list");
for (var i = 0; i < lists.length; i++) {
if (id == null || lists[i].getAttribute("id") == id) {
var result = new Array;
var items = lists[i].getElementsByTagName("item");
for (var j = 0; j < items.length; j++) {
var properties = items[j].getElementsByTagName("property");
var args = new Array;
for (var k = 0; k < properties.length; k++) {
args[properties[k].getAttribute("name")] = properties[k].getAttribute("value");
}
result[j] = new JItem(j, args);
}
return result;
}
}
return new Array;
}
/*
아래는 리스트를 새롭게 그리를 자바 스크립트 함수
*/
/**
* 테이블 리스트를 그린다.
*
* @param id tbody 태그의 아이디
* @param size 테이블의 칼럼 수
* @param countMessage 총 리스크 수를 표현하는 메시지
*/
function renderList(id, size, countMessage) {
var table = new JTable(id, size, new JTableFormat());
jprivate_clearTbody(id);
var response = jprivate_request.responseXML.documentElement;
var list = getList(response);
for (var i = 0; i < list.length; i++) {
table.createRow(list[i]);
}
jprivate_renderNavigation(response, countMessage);
}
/**
* 테이블을 포멧하는 클래스
*/
function JTableFormat() {
this.formatCell = formatCell;
}
/**
* tbody 태그의 모든 tr 태그를 지운다.
*
* @param tbodyId tbody 태그의 아이디
*/
function jprivate_clearTbody(tbodyId) {
var body = document.getElementById(tbodyId);
if (!body) {
alert("tbody 태그의 아이디를 지정해야 합니다.");
}
var rows = body.getElementsByTagName("tr");
for (var i = rows.length; i > 0; i--) {
body.deleteRow(i - 1);
}
}
/**
* 입력 변수에 3 자리마다 콤마(,)를 붙여 반환한다.
* @param field 콤마를 붙일 값
*/
function formatCommasThis(numString) {
var re = /,|\s+/g;
numString = numString.replace(re, "");
re = /(-?\d+)(\d{3})/;
while (re.test(numString)) {
numString = numString.replace(re, "$1,$2");
}
return numString;
}
/**
* 리스트의 네비게이션 바를 동적으로 그리는 함수.
* @param response XML의 response 태그를 나타내는 element
* @param countMessage 총 리스크 수를 표현하는 메시지
*/
function jprivate_renderNavigation(response, countMessage) {
var navigation = document.getElementById("navigationArea");
if (!navigation) {
return;
}
jprivate_tabSize = 10;
jprivate_pageNo = document.Form.pageNo.value;
if (jprivate_pageNo < 1) {
jprivate_pageNo = 1;
}
jprivate_totalSize = response.getAttribute("totalSize");
jprivate_listSize = response.getAttribute("listSize");
var html = "";
navigation.getElementsByTagName("div");
if (countMessage) {
var divMessage = navigation.getElementsByTagName("div")[0];
html += " " + countMessage.replace(/\{0\}/, formatCommasThis(jprivate_totalSize));
divMessage.innerHTML = html;
}
html = "";
if (jprivate_lastPage() > 1) {
html += "[처음] ";
}
if (jprivate_hasPreviousTab()) {
html += "[이전] ";
}
for (var i = jprivate_firstPageInTab(); i <= jprivate_lastPageInTab(); i++) {
if (jprivate_pageNo == i) {
html += "" + i + " ";
} else {
html += "" + i + " ";
}
}
if (jprivate_hasNextTab()) {
html += "[다음] ";
}
if (jprivate_lastPage() > 1) {
html += "[마지막]";
}
var divBar = navigation.getElementsByTagName("div")[1];
divBar.innerHTML = html;
// navigation.innerHTML = html;
}
/**
* 마지막 페이지 번호를 반환한다. 항상 정수형을 반환한다.
*/
function jprivate_lastPage() {
return Math.floor(jprivate_totalSize / jprivate_listSize) + ((jprivate_totalSize % jprivate_listSize) != 0 ? 1 : 0);
}
/**
* 현재 탭의 번호를 반환한다. 최소 값은 1이며 항상 정수형을 반환한다.
*/
function jprivate_currentTab() {
return 1 + Math.floor(((jprivate_pageNo - 1) / jprivate_tabSize));
}
/**
* 현재 탭의 번호가 1보다 크면 true를, 그렇지 않으면 false를 반환한다.
*/
function jprivate_hasPreviousTab() {
return jprivate_currentTab() > 1;
}
/**
* 현재 탭에 마지막 페이지 번호가 포함되어 있으면 false를, 그렇지 않으면 true를 반환한다.
*/
function jprivate_hasNextTab() {
return (jprivate_currentTab() * jprivate_tabSize) - jprivate_lastPage() < 0;
}
/**
* 현재 탭의 첫번째 페이지 번호를 반환한다.
*/
function jprivate_firstPageInTab() {
return ((jprivate_currentTab() - 1) * jprivate_tabSize) + 1;
}
/**
* 현재 탭의 마지막 페이지 번호를 반환한다.
*/
function jprivate_lastPageInTab() {
return jprivate_hasNextTab() ? jprivate_currentTab() * jprivate_tabSize : jprivate_lastPage();
}