var CONDITION_CLASS_NAME = "com.yuanluesoft.jeaf.view.model.search.Condition";
var focusIndex = -1;
function onFocus(src) { 
	while(src.id != "trCondition") {
		src = src.parentElement;
	}
	focusIndex = src.rowIndex;
}
function onFieldChange(select, resetExpression) { 
	for(var i=0; i<select.options.length; i++) {
		select.parentElement.nextSibling.all("expression" + select.options[i].value).style.display = "none";
	}
	var expression = select.parentElement.nextSibling.all("expression" + select.options[select.selectedIndex].value);
	if(resetExpression) {
		expression.selectedIndex = 0;
	}
	expression.style.display = "";
	onExpressionChange(expression);
}
function onExpressionChange(expression) { 
	var row = expression.parentElement.parentElement;
	var fieldList = row.all.field.options;
	for(var i=0; i<fieldList.length; i++) {
		row.all("compare" + fieldList[i].value).style.display = "none";
		if(row.all("compare" + fieldList[i].value + "Range")) {
			row.all("compare" + fieldList[i].value + "Range").style.display = "none";
		}
	}
	row.all("compare" + expression.id.substring(10) + (expression.options[expression.selectedIndex].value.indexOf("between")==-1 ? "" : "Range")).style.display = "";
}
function addCondition() { 
	var table = document.all.tableSearch;
	var lastRow = table.rows[table.rows.length - 1];
	var newRow = table.insertRow();
	newRow.id = lastRow.id;
	newRow.borderColor = lastRow.borderColor;
	newRow.style.cssText = lastRow.style.cssText;
	for(var i=0; i<lastRow.cells.length; i++) {
		newRow.insertCell().innerHTML = lastRow.cells[i].innerHTML;
	}
	newRow.all.linkMode.selectedIndex = 0;
	newRow.all.field.selectedIndex = (newRow.all.field.selectedIndex < newRow.all.field.options.length -1 ? newRow.all.field.selectedIndex + 1 : 0);
	onFieldChange(newRow.all.field, true);
	var inputs = newRow.cells[3].all.tags("input");
	for(var i=0; i<inputs.length; i++) {
		if(inputs[i].type.toLowerCase()=="text") {
			inputs[i].value = "";
		}
	}
	addSearchDatePicker(newRow);
	focusIndex = newRow.rowIndex;
}
function setCondition(searchCondition, index) {
	var table = document.all.tableSearch;
	var row = table.rows[index];
	
	row.all.linkMode.selectedIndex = (searchCondition.linkMode=="AND" ? 0 : 1);
	
	var field = row.all.field, i=0;
	for(; i<field.options.length && field.options[i].value!=searchCondition.fieldName; i++);
	field.selectedIndex = i;
	onFieldChange(field, true);
	
	var expression = row.all("expression" + searchCondition.fieldName);
	for(i=0; i<expression.options.length && expression.options[i].value!=searchCondition.expression; i++);
	expression.selectedIndex = i;
	onExpressionChange(expression);
	
	var valueTable = row.all("compare" + searchCondition.fieldName + (searchCondition.expression=="between" ? "Range" : ""));
	if(searchCondition.value1) {
		valueTable.all.value1.value = searchCondition.value1;
	}
	if(searchCondition.value2) {
		valueTable.all.value2.value = searchCondition.value2;
	}
	if(searchCondition.title1) {
		valueTable.all.title1.value = searchCondition.title1;
	}
	if(searchCondition.title2) {
		valueTable.all.title2.value = searchCondition.title2;
	}
}
function deleteCondition() { 
	if(focusIndex!=-1 && document.all.tableSearch.rows.length > 2) {
		document.all.tableSearch.deleteRow(focusIndex);
	}
	focusIndex = -1;
}
function generateSearchConditions(viewPackageName) { 
	var describe = "";
	var searchConditions = new Array();
	var rows = document.all.tableSearch.rows;
	var j = 0;
	for(var i=1; i<rows.length; i++) {
		var searchCondition = new Object();
		searchCondition.attributes = "className,linkMode,fieldName,fieldType,expression,value1,value2,title1,title2";
		searchCondition.className = CONDITION_CLASS_NAME;
		searchCondition.linkMode = rows[i].all.linkMode.options[rows[i].all.linkMode.selectedIndex].value;
		var field = rows[i].all.field.options[rows[i].all.field.selectedIndex];
		searchCondition.fieldName = field.value;
		searchCondition.fieldType = field.label;
		var expression = rows[i].all("expression" + searchCondition.fieldName).options[rows[i].all("expression" + searchCondition.fieldName).selectedIndex];
		searchCondition.expression = expression.value;
		if(searchCondition.expression.indexOf("between")==-1) {
			var valueTable = rows[i].all("compare" + searchCondition.fieldName);
			switch(searchCondition.fieldType) {
			case "string":
				searchCondition.value1 = validateStringField(valueTable.all.value1, "',&,?,=");
				break;
			case "number":
				searchCondition.value1 = validateNumberField(valueTable.all.value1);
				break;
			case "date":
				searchCondition.value1 = validateDateField(valueTable.all.value1);
				break;
			}
			if(searchCondition.value1=="NaN") {
				return;
			}
			if(searchCondition.value1=="") {
				continue;
			}
			if(valueTable.all.title1) {
				searchCondition.title1 = valueTable.all.title1.value;
			}
			describe += (describe=="" ? "" : "\r\n " + rows[i].all.linkMode.options[rows[i].all.linkMode.selectedIndex].text);
			describe += " " + field.text;
			describe += " "  + expression.text;
			describe += " "  + (searchCondition.title1 ? searchCondition.title1 : searchCondition.value1);
		}
		else {
			var valueTable = rows[i].all("compare" + searchCondition.fieldName + "Range");
			switch(searchCondition.fieldType) {
			case "number":
				searchCondition.value1 = validateNumberField(valueTable.all.value1);
				searchCondition.value2 = validateNumberField(valueTable.all.value2);
				break;
			case "date":
				searchCondition.value1 = validateDateField(valueTable.all.value1);
				searchCondition.value2 = validateDateField(valueTable.all.value2);
				break;
			}
			if(searchCondition.value1=="NaN" || searchCondition.value2=="NaN") {
				return;
			}
			if(searchCondition.value1=="" || searchCondition.value2=="") {
				continue;
			}
			if(valueTable.all.title2) {
				searchCondition.title2 = valueTable.all.title2.value;
			}
			describe += (describe=="" ? "" : "\r\n " + rows[i].all.linkMode.options[rows[i].all.linkMode.selectedIndex].text);
			describe += " " + field.text;
			describe += " "  + expression.text;
			describe += " "  + (searchCondition.title1 ? searchCondition.title1 : searchCondition.value1);
			describe += " \u548C "  + (searchCondition.title2 ? searchCondition.title2 : searchCondition.value2);
		}
		searchConditions[j++] = searchCondition;
	}
	document.getElementsByName(viewPackageName + ".searchConditions")[0].value = (searchConditions.length>0 ? toJavaObject(searchConditions) : "");
	document.getElementsByName(viewPackageName + ".searchConditionsDescribe")[0].value = describe;
}
function startSearch(viewPackageName) { 
	generateSearchConditions(viewPackageName); 
	if(document.getElementsByName(viewPackageName + ".searchConditions")[0].value=="") {
		alert("\u641C\u7D22\u6761\u4EF6\u4E3A\u7A7A\uFF0C\u641C\u7D22\u4E0D\u80FD\u5B8C\u6210\uFF01");
		return;
	}
	doAction(getCurrentAction(), viewPackageName + ".currentViewAction=search&viewPackageName=" + viewPackageName);
}
var clickedButton;
function showSelectDialog(button,applicationName,dialogName,width,height,valueField,titleField) {
	clickedButton = button;
	openSelectDialog(applicationName,dialogName,width,height,false,"selectedTitle{" + titleField + "},selectedValue{" + valueField + "}", "afterSelected()");
}
function showListDialog(button,values,width,height) {
	clickedButton = button;
	document.all.selectedValue.value = values;
	openListDialog("\u9009\u62E9","list","selectedValue",width,height,false,"selectedTitle{title},selectedValue{value}","afterSelected()");
}
function afterSelected() {
	clickedButton.parentElement.parentElement.all.value1.value = document.all.selectedValue.value;
	clickedButton.parentElement.parentElement.all.title1.value = document.all.selectedTitle.value;
}
function showSelectList(button,values) { 
	var table = button.offsetParent.offsetParent;
	showValueList(values, table.all.value1, table.all.title1 , table);
}
function addSearchDatePicker(row) {
	if(!row) {
		row = document.getElementById("tableSearch").rows[1];
	}
	var inputs = row.getElementsByTagName("input");
	for(var i=0; inputs && i<inputs.length; i++) {
		if(inputs[i].id=="buttonDatePicker") {
			addDatePicker(inputs[i-1], inputs[i], true);
		}
	}
}
function initSearchCondition(viewPackageName) {
	var searchConditions = document.getElementsByName(viewPackageName + ".searchConditions")[0].value;
	try {
		if(searchConditions!="") {
			searchConditions = parseJSObject(searchConditions);
			if(searchConditions[0].fieldName) {
				for(var i=0; i<searchConditions.length - 1; i++) {
					addCondition();
				}
				for(var i=0; i<searchConditions.length; i++) {
					setCondition(searchConditions[i], i+1);
				}
				return;
			}
		}
	}
	catch(e) {
	
	}
	
	
}
function quickFilter(viewPackageName) {
	var field = document.getElementsByName(viewPackageName + ".quickFilter")[0];
	if(field.value!="") {
		var value = validateStringField(field, "',="); //\u5FEB\u901F\u8FC7\u6EE4,quickFilterKey\u4E2D\u4E0D\u80FD\u5305\u542B"="\u548C"'"
		if(value!="NaN") {
			var searchCondition = new Object();
			searchCondition.attributes = "className,value1,quickFilter";
			searchCondition.className = CONDITION_CLASS_NAME;
			searchCondition.quickFilter = true;
			searchCondition.value1 = value;
			document.getElementsByName(viewPackageName + ".searchConditions")[0].value = toJavaObject(new Array(searchCondition));
			doAction(getCurrentAction(), viewPackageName + ".currentViewAction=search&viewPackageName=" + viewPackageName);
		}
	}
}
function switchToSearch(viewPackageName) { 
	doAction(getCurrentAction(), viewPackageName + ".currentViewAction=switchToSearch&viewPackageName=" + viewPackageName);
}
function finishSearch(viewPackageName) { 
	document.getElementsByName(viewPackageName + ".pageState")[0].value = "view";
	doAction(getCurrentAction(), viewPackageName + ".currentViewAction=finishSearch&viewPackageName=" + viewPackageName);
}
