function goPage(pageNumber) {
	document.wnsearch.elements['startPage'].value = pageNumber;
	document.wnsearch.submit();
}

function goTab(collection, collectionName, targetLink) {
	document.wnsearch.elements['collection'].value = collection;
	document.wnsearch.elements['collectionName'].value = collectionName;
	document.wnsearch.action = targetLink;
	document.wnsearch.submit();
}

function goPopular(_query_) {
	document.search.elements['collection'].value = "all";
	document.search.elements['collectionName'].value = "ÅëÇÕ°Ë»ö";
	document.search.elements['flag'].value = "all";
	document.search.elements['query'].value = _query_;

	document.search.submit();
}

function numeralsOnly(evt, f) {
    evt = (evt) ? evt : event;
    var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode :
        ((evt.which) ? evt.which : 0));
    if (charCode > 31 && (charCode < 36 || charCode > 57)) {
        alert("¼ýÀÚ¸¸ ÀÔ·Â °¡´ÉÇÕ´Ï´Ù.");
//        alert("Enter numerals only in this field.");
				f.value = "";
        return false;
    }
    return true;
}

String.prototype.trim = function() {
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

function validation(str) {
	var right = 0;
	var left = 0;
	var returnValue;

	for (x = 0; x < str.length; x++) {
		if (str.charAt(x) == '(') {
			left = parseInt(left + 1);
		} else if (str.charAt(x) == ')') {
			right = parseInt(right + 1);
		}
	}

	if (right > left) {
		returnValue = 1;
	} else if (right < left) {
		returnValue = -1;
	} else {
		returnValue = 0;
	}
	return returnValue;
}

function parse(searchString) {

	var filterOperation = "";

	if (searchString.trim() != '') {
		var valid = validation(searchString.trim());

		if (valid == 1) {
			alert("Syntax Error on token \")\", delete this token.");
			return null;
		} else if (valid == -1) {
			alert("Syntax Error on token \"(\", delete this token.");
			return null;
		}

		var extOperation = searchString.split(" ");

		var splited
		for (k = 0; k < extOperation.length; k++) {
			if (!extOperation[k].match(/and/i) && !extOperation[k].match(/or/i)) {

				splited = extOperation[k].split(":");
				if (splited.length > 2) {
					alert("Parsing Error : " + extOperation[k]);
					return null;
				} else if (splited.length < 2) {
					if ( splited[0].match(/(\()|(\))/g) ) {
						filterOperation = filterOperation + splited[0].trim();
						continue;
					} else {
						alert("Parsing Error : " + splited[0]);
						return null;
					}
				} else {
					var fieldName = splited[0];
					var fieldValue = splited[1];
					var valueLength;

					if ( fieldValue.match(/(\s*)\)/g)) {
						valueLength = fieldValue.length - 2;
					} else {
						valueLength = fieldValue.length - 1;
					}

					if ( (fieldValue.indexOf("*") == 0) && (fieldValue.lastIndexOf("*") == valueLength) ) {
						fieldValue = "<substring>" + fieldValue.replace(/\*/g, "");
					} else if ( (fieldValue.indexOf("*") == 0) && (fieldValue.lastIndexOf("*") == 0) ) {
						fieldValue = "<end>" + fieldValue.replace(/\*/g, "");
					} else if ( (fieldValue.indexOf("*") >= 0) && (fieldValue.lastIndexOf("*") == valueLength) ) {
						fieldValue = "<start>" + fieldValue.replace(/\*/g, "");
					} else {
						fieldValue = "<substring>" + fieldValue;
					}

/*
					if (fieldName == "AS" || fieldName == "IN") {
						fieldName = "_" + fieldName + "_";
					}
*/
					filterOperation = filterOperation + fieldName + fieldValue;
				}
			} else if ( extOperation[k].match(/and/i) ) {
				filterOperation = filterOperation + " ";
			} else if ( extOperation[k].match(/or/i) ) {
				filterOperation = filterOperation + "|";
			}
		}
		//alert(searchString + " :::::: " + filterOperation);
	}
	return filterOperation;
}

function wnCheckOnSubmit() {
	var fm = document.wnsearch;
	var result;

	result = parse(fm.filter.value);
	if (result != null) {
		fm.hiddenFilter.value = result;
		return true;
	} else {
		return false;
	}
}
