/**
 * 제작사: BraunSton Interactive Co.
 * 파일ID: $Id: locator.js,v 1.9 2008/05/02 00:43:00 dev08 Exp $
**/

/****************************************************************************************
 * Constant
 ****************************************************************************************/

/* Context Path */
var LOC_CONTEXT_PATH = '/firstavenue';
/* Parameter Name */
var LOC_PARAM_CURR_PAGE = 'paging.currPage';
var LOC_PARAM_SORT = 'sort';
var LOC_PARAM_SORT_FIELD = 'sortField';
var LOC_PARAM_SORT_ORDER = 'sortOrder';
/* URL */
var LOC_URL_EXTENSION = '.jsp';
var LOC_PATTERN_CONTEXTPATH = new RegExp("^(/\w+)(/.+)$");
var LOC_PATTERN_FILEPATH = new RegExp("[w\.]+$");

/****************************************************************************************
 * Parameter Function
 ****************************************************************************************/
/*
 * getContextPath
 */
function getContextPath() {

	var pn = self.location.pathname;
	//alert(pn);
	var p = pn.indexOf('/', 1);

	if(p>1) {
		return pn.substring(0, p);
	}
	else {
		return '';
	}
}

/*
 * location.pathname
 */
function getPathname(a) {
    var pn = self.location.pathname;
    return pn.replace(LOC_PATTERN_FILEPATH, a);
}

/*
 * location.search
 */
function getSearch() {

    var s = self.location.search;
    var a = getSearch.arguments;

    if(a.length==0) {
        return s;
    }

    for(var i=0; i<a.length-1; i=i+2) {
        var k = a[i];

        var r = new RegExp(k + '=[^&]*');
        var v = (a.length>i+1 && a[i+1]!=null)? (k + '=' + a[i+1]): '';
        if(r.test(s)) {
            s = s.replace(r, v);
        }
        else {
            s += ((s=='')? '?' : '&') + v;
        }
    }

    return s;
}

/*
 * location.search
 */
function getQueryString() {

    var a = getQueryString.arguments;

    if(a.length==0) {
        return self.location.search;
    }

    var s = a[0];

    for(var i=1, l=a.length-1; i<l; i=i+2) {

        var k = a[i];
        var r = new RegExp(k + '=[^&]*');
        var v = (i<l && a[i+1]!=null)? (k + '=' + a[i+1]): '';

        if(r.test(s)) {
            s = s.replace(r, v);
        }
        else {
            s += ((s=='')? '?' : '&') + v;
        }
    }

    return s;
}

/*
 * return the value of given parameter extracted from URL QueryString.
 */
function getParameter(name) {

    var s, i, j, k;
    s = self.location.search;
    i = s.indexOf(name + '=');
    if(i<0) {
        return null;
    }

    j = i + name.length + 1;
    k = s.indexOf('&', j);

    return (k<0)? s.substr(j) : s.substring(j, k);
}

/*
 * another logic of implementating getParameter function.
function getParameter(n) {

    var s = new String(self.location.search);

    ss = s.substr(1).split('&');
    for(var i=0; i<ss.length; i++) {
        var pair = ss[i].split('=');
        if(pair[0]==n) {
            return pair[1];
        }
    }

    return null;
}
*/

/****************************************************************************************
 * navigation
 ****************************************************************************************/

/**
 * paging
 *
 * argument, paging
 * argument,
 */
function paging(p) {

    if(!p || p==null) {
        p = 1;
    }

	self.location.search = getSearch(LOC_PARAM_CURR_PAGE, p);
}
	
/**
 * change location
 */
function locating() {

    var a = locating.arguments;
    if(a.length==0) {
        return;
    }

    var pathname = ((a[0].charAt(0)=='/')? a[0]: getPathname(a[0]));

    self.location = LOC_CONTEXT_PATH + pathname + getSearch(LOC_PARAM_CURR_PAGE, 1, LOC_PARAM_SORT_FIELD, '', LOC_PARAM_SORT_ORDER, '');
}

function sorting(field, order) {

    var currField = getParameter(LOC_PARAM_SORT_FIELD);
    var currOrder = getParameter(LOC_PARAM_SORT_ORDER);
    if(field!=currField || currOrder==null) {
        vcOrder = order;
        if(vcOrder==null) {
            vcOrder = 'desc';
        }
    }
    else if(currOrder=='asc') {
            vcOrder = 'desc';
    }
    else if(currOrder=='desc') {
            vcOrder = 'asc';
    }
    else {
        vcOrder = 'desc';
    }
    
    self.location.search = getSearch(LOC_PARAM_SORT_FIELD, field, LOC_PARAM_SORT_ORDER, vcOrder, LOC_PARAM_CURR_PAGE, 1);
}

// Search
function searching(oForm) {

    var oColl = oForm.elements;
    var query;
    
//  alert(query);
    if(oColl) for(var i=0; i<oColl.length; i++) {
        var o = oColl.item(i);

        switch(o.tagName) {
            case 'SELECT' :
                query = getSearch(o.name, o.options(o.selectedIndex).value);
                break;

            case 'TEXTAREA' :
                break;

            case 'INPUT' :
                switch(o.type) {
                    case 'radio' :
                        break;

                    case 'checkbox' :
                        break;

                    case 'hidden' :
                    case 'text' :
                        query = getSearch(o.name, o.value);
                        break;

                    default :
                }
                break;

            default :
        }
    }

    self.location.search = query;
    return false;
}

var Nav = Class.create({

	initialize: function() {
		this.pathname = location.pathname;
		this.search = location.search;
	},

	write: function() {
		alert('here');
		location.pathname = this.pathname.replace(new RegExp("list\w*\.\w+"), "write.jsp");
	},
	
	erase: function(id) {

		if(!confirm("삭제하시겠습니까?")) {
			return;
		}

		var oform = new Element("FORM", {
			name: 'DeleteForm',
			method: 'POST' /*,
			action: getPathname('erase') + s; */
		});
		oform.insert(oinput);
		$(document.body).insert(oform);

		oform.submit();
	},

	cancel: function() {
		history.back();
	}
});

var bunch = Class.create({

	_disabled: false,

	toggleStatus: function() {
	//  alert(toggleStatus.arguments[0]);
		alert(_disabled);
		_disabled = !_disabled;
		alert(_disabled);
		$('contrall').style.backgroundColor = _disabled? "#CCCCCC": "#FFFFFF";
	},

	toggle: function(ocheckbox, fname) {

		var oform = ocheckbox.form;
		
		var g = oform.elements[fname];
	//  alert(g.length);
		if(!g) {
			ocheckbox.checked = false;
	//      event.cancelBubble = true;
			return false;
		}
		
		if(g.length) for(var i=0; i<g.length; i++) {
			g[i].checked = ocheckbox.checked;
		}
		else {
			g.checked = ocheckbox.checked;
		}
	},

	eraseall: function(oform, id) {

		var g = document.all(id);
		var n = '';

		if(g.length) for(var i=0; i<g.length; i++) {
			if(g[i].checked) n += ', '+g[i].value;
		}
		else if(g) {
			n = ', '+g.value;
		}

		if(n=='') {
			alert('.');
			return false;
		}

		if(!confirm("?")) {
			return false;
		}

		var node = document.createElement("INPUT");
		node.type = 'hidden';
		node.name = 'ns';
		node.value = n.substring(2);
		oform.appendChild(node);

		oform.action = getPathname('deleteall') + self.location.search;
	},

	saveall: function(oform, id) {

		var g = document.all(id);
		var n = '';

		if(g.length) for(var i=0; i<g.length; i++) {
			if(g[i].checked) {
				n += ', '+g[i].value;
			}
		}
		else if(g) {
			n = ', ' + g.value;
		}

		if(n=='') {
			alert('.');
			return false;
		}

		var node = document.createElement("INPUT");
		node.type = 'hidden';
		node.name = 'ns';
		node.value = n.substring(2);
		oform.appendChild(node);

		oform.action = getPathname('keepall') + self.location.search;
	}
});

/****************************************************************************************
 *  window, dialog window - open and close
 ****************************************************************************************/

/*
 * popup window.
 */
function openWindow() {

    var a = openWindow.arguments;
    if(a.length==0) {
        return;
    }

    var u = a[0];
    if(u.indexOf('/')==0) {
        u = getContextPath() + u;
    }

    var p = (a.length>1)? a[1]: '';
    //alert(p);

    var o = (a.length<=6)? 'directories=0, location=0, menubar=0, toolbar=0, scrollbars=0, statusbar=0, resizable=0' : a[6];
    if(a.length>2) o +=', width='+a[2];
    if(a.length>3) o +=', height='+a[3];
    if(a.length>4) o +=', left='+a[4];
    if(a.length>5) o +=', top='+a[5];

    var win = window.open(u, p, o);
    win.focus();

    return win;
}

/*
 * popup window.
 */
function openDialog() {

    var a = openDialog.arguments;
    var u = a[0];
    if(u==null) {
        return;
    }

    var p = a[1];
    var o = (a[6]!=null)? a[6]: 'edge: raised; center: yes; help: no; resizable: no; status: no;';
    if(a[2]!=null) o +=' dialogWidth: '+a[2] + 'px;';
    if(a[3]!=null) o +=' dialogHeight: '+a[3] + 'px;';
    if(a[4]!=null) o +=' dialogLeft: '+a[4] + 'px;';
    if(a[5]!=null) o +=' dialogTop: '+a[5] + 'px;';

    return window.showModelessDialog(u, p, o);
}

/*
 * popup window.
 */
function winCloseAndReload() {
    opener.window.location.reload();
    self.close();
}

/****************************************************************************************
 * submit form check
 ****************************************************************************************/
function checkLoginForm(oform) {

    if ($F('UserID').blank()) {
        alert("아이디를 입력해 주세요.");
        $('UserID').activate();
        return false;
    }

    if ($F('Passwd').blank()) {
        alert("패스워드를 입력해 주세요.");
        $('Passwd').activate();
        return false;
    }

    if($F('Guarded') == 'Y') {
        oform.action = 'https://' + location.host + '/asp/member/login.asp';
    }

    return true;
}

function isValidPostForm(oform) {
    oform.action += self.location.search;
    return true;
}

function isValidQuickLinkLinkDeleteForm(oform) {
    oform.action += getSearch("keyword", oform.elements['keyword'].value);
    return true;
}

function submitGetForm(oform) {
    copySearchStringToHiddenInput(oform);
}

function submitSearchForm(oform) {
    var query = $(oform).serialize();
    return true;
}

function checkSubmitForm(oform) {

    var g = $(oform).getElements();
    var name, max, min, len;

    for (var i=0, s=g.size(); i<s; i++) {

        name = g[i].readAttribute('NAME');
        if (!name) {
            continue;
        }

        if (g[i].disabled) {
            continue;
        }

		if(!g[i].visible()) {
			continue;
		}

        switch (g[i].tagName) {

        case 'SELECT':
        case 'select':
            min = g[i].readAttribute('minlength');
            if (min){
                if(min > 0) {
                    if(!g[i].present()) {
                        message(g[i], '선택해 주십시오.');
                        g[i].activate();
                        return false;
                    }
                }
            }
            break;

        case 'TEXTAREA':
        case 'textarea':
            if (g[i].hasClassName('EditCtrl')) {
            }
            else if (!checkTextElement(g[i])) {
                g[i].activate();
                return false;
            }
            break;

        case 'INPUT':
        case 'input':
            switch (g[i].readAttribute('type')) {
            case 'FILE':
            case 'file':
                min = g[i].readAttribute('minlength');
                if (min){
                    if(min > 0) {
                        if(!g[i].present()) {
                            message(g[i], '파일이 필요합니다.');
                            g[i].activate();
                            return false;
                        }
                    }
                }
                break;
            default:
                if (!checkTextElement(g[i])) {
                    g[i].activate();
                    return false;
                }
            }

            break;
        default:
        }
    }

    return true;
}

function checkTextElement(obj) {

    var pattern = obj.readAttribute('pattern');
    if (pattern) {
        var re = new RegExp(pattern);
        //alert(pattern);
        //alert($F(obj));
        if (!re.test($F(obj))) {
            message(obj, '입력 규정을 지키주십시오.');
            return false;
        }
    }

    len = ($F(obj))? $F(obj).length: 0;
    min = obj.readAttribute('minlength');
    if (min){
        if(min == 1) {
            if(!obj.present()) {
                message(obj, '입력하여야 합니다.');
                obj.activate();
                return false;
            }
        }
        else if(min > 1) {
            if(len < min) {
                message(obj, min + '자 이상 입력하여야 합니다.');
                obj.activate();
                return false;
            }
        }
    }

    max = obj.readAttribute('maxlength');
    if (max){
        if(len > max) {
            message(obj, min + '자까지만 입력가능합니다.');
            obj.activate();
            return false;
        }
    }

    return true;
}

/**
 * 이미 투표한 설문 알림창
 */
function message(obj, alt) {

    if (typeof obj == 'object') {
        var m = obj.readAttribute('message');
        alert((m)? eval(m): alt);
    }
    else {
        switch(obj) {
        case 'NotLogined':
            alert("로그인후에 사용하실 수 있습니다.");
            break;
        case 'MyCreatingVote':
            alert("자신이 만든 설문판은 투표하실 수 없습니다.");
            break;
        case 'MyCreatingSayGood':
            alert("자신이 만든 판은 추천하실 수 없습니다.");
            break;
        case 'AlreadySaidGood':
            alert("이미 추천하셨습니다.");
            break;
        case 'AlreadyVoted':
            alert("이미 설문에 참여하셨습니다.");
            break;
        default:
            alert(eval(obj));
        }
    }
}

/****************************************************************************************
 * Ajax 일반
 ****************************************************************************************/

/**
 * Ajax 페이지 불러오기 - GET 방식
 */
function loadPage(target, path, search) {

    new Ajax.Updater(target, path, {
        method: 'GET',
        parameters: search
    });
}

/**
 * Ajax 페이지 불러오기 - POST 방식
 */
function submitForm(target, path, oform) {

    if(!path) {
        path = oform.action;
    }

    new Ajax.Updater(target, path, {
        parameters: $(oform).serialize(true)
    });
}

