// Javascript file for QBEForm.epl

var list = new Array();
var selected = new Array();
var text_target = new Object();
var key_target = new Object();
var namedQuery = new Array();
var queryOperator = new Array();
var category = new Array();
var blankCategory = new Array();
var blankOperator = new Array();
var savedQuery = new Object();

// Init the option arrays for various pulldown menus.
namedQuery[0] = new Array('myQuery1','myQuery1',true);
namedQuery[1] = new Array('myQuery2','myQuery2',false);
namedQuery[2] = new Array('myQuery3','myQuery3',false);

queryOperator[0] = new Array('Contains Any','containsAny',true);
queryOperator[1] = new Array('Contains All','containsAll',false);
queryOperator[2] = new Array('LIKE','like',false);
queryOperator[3] = new Array('Not LIKE','notLike',false);

// Used to keep emptied pulldowns at their proper dimensions.
blankOperator[0] = new Array('___________','',true);
for (var i = 1; i < queryOperator.length; i++) {
	blankOperator[i] = new Array(' ','',false);
}

category[0] = new Array('Catalog','catalog',true);
category[1] = new Array('Topic','keyword',false);
category[2] = new Array('Bioregion','bioregion',false);
category[3] = new Array('County','county',false);
category[4] = new Array('Content Type','content',false);
category[5] = new Array('Orginator','originator',false);
category[6] = new Array('Named Query','namedQuery',false);

// Used to keep emptied pulldowns at their proper dimensions.
blankCategory[0] = new Array('______________________','',true);
for (i = 1; i < category.length; i++) {
	blankCategory[i] = new Array(' ','',false);
}


function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i>d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_setTextOfTextfield(objName,x,newText) { //v3.0
  var obj = MM_findObj(objName); if (obj) obj.value = newText;
}

function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
      } else if (test!='R') {
        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (val<min || max<val) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
  } if (errors) alert('The following error(s) occurred:\n'+errors);
  document.MM_returnValue = (errors == '');
}

function CR_changeDropDown(self,objName) { //v1.0

	if (self.options[self.selectedIndex].value == 'namedQuery') {
		var names = new Array();
		var i = 0;
		for (var name in savedQuery) {
			names[i] = new Array(name,name,'false');
			i++;
		}
		CR_loadDropDown(objName,names);
	}
	else {
		CR_loadDropDown(objName,queryOperator);
	}
}

function CR_loadDropDown(objName,sourceArray) { //v1.0
  var obj = MM_findObj(objName);
  	
  if (obj) {
	  obj.length = sourceArray.length;
	  for (var i = 0; i < sourceArray.length; i++) {	
	  	obj.options[i] = new Option(sourceArray[i][0],sourceArray[i][1],sourceArray[i][2]); }
	}
}

function CR_setText(selfName,textName) {
	var textObj = MM_findObj(textName);
	var selfObj = MM_findObj(selfName);
	var selected = selfObj.options[selfObj.selectedIndex].value;
	if (savedQuery[selected]) textObj.value = savedQuery[selected];
}

function init() {
	CR_loadDropDown('category1',category);
	CR_loadDropDown('category2',category);
	CR_loadDropDown('operator1',queryOperator);
	CR_loadDropDown('operator2',queryOperator);
	var obj = MM_findObj('category1');
	obj.selectedIndex = 0;
	obj = MM_findObj('operator1');
	obj.selectedIndex = 0;
}

function CR_ClearRow(self,row) {
 	if ((self.options[self.selectedIndex].value != 'and') && 
		(self.options[self.selectedIndex].value != 'or')) {
			CR_loadDropDown('category'+ row,blankCategory);
			CR_loadDropDown('operator'+ row,blankOperator);
		MM_setTextOfTextfield('textField'+ row,'','');
	} else {
		CR_loadDropDown('category'+ row,category);
	}
}


// list accessor function
function getList() {
	return list;	
 }

// Selected accessor function
function getSelected() {
	return selected;	
 }

// term list setter function
function setTarget(formObject) {
	target = formObject;
  }	

// term list accessor function
function getThemes() {
	return this.document.forms[0].themeTerms.value;	
 }

// term list setter function
function setThemes(list) {
	this.document.forms[0].themeTerms.value = list;
  }	

// term list setter function
function setTerms(list) {
	text_target.value = list.join(',');
  }	

// key list setter function
function setKeys(list) {
	key_target.value = list.join(',');
  }	

function thesaurusPick() {
   w = window.open("","thesaurus","width=600,height=300,status=yes,resizable=yes,scrollbars=yes,left=300,top=300");
   w.location = "/cgi-bin/thesaurusTool.pl?keyword=nature";
   // Set the opener explicitly just in case.
   if (!w.opener) w.opener = self;	
 }

function routePick(category,textTarget,keyTarget) {
	if (category == 'catalog') {
		pickList('metadata','catalog','oid','name','' , textTarget, keyTarget)		
	}
	else if (category == 'keyword') {
//		pickList('metadata','keyword','oid','name', 'select oid,name from keyword order by name;', textTarget, keyTarget);
		pickList('metadata','','','', 'select distinct k.oid,k.name from dataset d, keyword k, ds_theme t where t.dataset_id = d.oid and t.theme_id = k.oid order by name;', textTarget, keyTarget);
	}
	else if (category == 'bioregion') {
		pickList('metadata','','','','select distinct s.oid,s.name from dataset d, spatialdomain s where d.spatialdomain_oid = s.oid and upper(s.type) = \'BIOREGION\' order by name;',textTarget, keyTarget);
	}
	else if (category == 'county') {
		pickList('metadata','','','','select distinct s.oid,s.name from dataset d, spatialdomain s where d.spatialdomain_oid = s.oid and upper(s.type) = \'COUNTY\' order by name;',textTarget, keyTarget);
	}
	else if (category == 'city') {
		pickList('metadata','','','','select distinct s.oid,s.name from dataset d, spatialdomain s where d.spatialdomain_oid = s.oid and upper(s.type) = \'CITY\' order by name;',textTarget, keyTarget);
	}
	else if (category == 'content') {
		pickList('metadata','content','oid','name', 'select oid,name from content order by name;', textTarget, keyTarget);
	}
	else {
		alert('No Pick List Available.');
	}
}

function pickList(db,table,valueCol,nameCol,sql,textTarget,keyTarget) {
   var location = "";
   
   text_target = textTarget;
   key_target = keyTarget;
   selected = textTarget.value.split(/(,\s*)|(;\s*)/);
   sql = escape(sql);
//alert(sql);
   location = "termPicker.epl?db="+db+"&table="+table+"&valueColumn="+valueCol+"&nameColumn="+nameCol+"&sql="+sql;
// alert(location););
   window.location = location;
 }

function termPicker(db,table,valueCol,nameCol,sql,textTarget,keyTarget) {
   var location = "";
   
   sql = escape(sql);
   location = "termPicker.epl?db="+db+"&table="+table+"&valueColumn="+valueCol+"&nameColumn="+nameCol+"&sql="+sql+"&keyTarget="+keyTarget;
   window.location = location;
 }

function CR_buildClause(conj,category,operator,text,keys) {
	var clause,obj,cat,op;
	
	clause = '';

	obj = MM_findObj(text);
	if (obj.value == '') {
	   return '';
	}
	
	obj = MM_findObj(conj);
	if (obj) {
	  if (obj.options[obj.selectedIndex].value == 'and' || obj.options[obj.selectedIndex].value == 'or'){
		clause = ' ' + obj.options[obj.selectedIndex].value + ' ';
	  }
	  else { return ''; }
	}

	obj = MM_findObj(category);
	if (obj) {
		cat = obj.options[obj.selectedIndex].value;
		if (cat == 'namedQuery') {
			term = MM_findObj(text);
			clause = clause + term.value; }
		else if (cat.search(/theme/i) > -1){
			clause = clause + 'keyword '; }
		else {	
			clause = clause + cat + ' '; }
	}
	obj = MM_findObj(operator);
	if (obj) {
		op = obj.options[obj.selectedIndex].value;
		if (op == 'contains') {
			term = MM_findObj(keys);
			clause = clause + 'IN (' + term.value + ') '; }
		else if (op == 'containsAll') {
			term = MM_findObj(keys);
			clause = clause + 'IN (' + term.value + ') '; }
		else if (op == 'like') {
			term = MM_findObj(text);
			clause = clause + 'LIKE "%' + term.value + '%" '; }
		else if (op == 'notLike') {
			term = MM_findObj(text);
			clause = clause + 'not LIKE "%' + term.value + '%" '; }
	}
	return clause;		
}


function CR_buildQuery() {
	var sql
	var obj = MM_findObj('searchScope');
	var cat = MM_findObj('catalog');
	if (obj && (obj[1].checked) && cat) {
		sql = 'd.catalog_oid = ' + cat.value + ' and ';
	}
	else { sql = '' }
	
	sql = sql + CR_buildClause('','category1','operator1','textField1','field1Keys');
	sql = sql + CR_buildClause('conj1','category2','operator2','textField2','field2Keys');
//	sql = sql + CR_buildClause('conj2','category3','operator3','textField3','field3Keys');

	if (obj && (obj.checked)) {
		obj = MM_findObj('order_by');
		obj.value = 'cat_name, title';
	}

//alert(sql);
	return sql;
}

function CR_saveQuery() {
	var obj = MM_findObj('queryName');
	if (obj) {
		savedQuery[obj.value] =	"(" + CR_buildQuery() + ")";
	}
alert(savedQuery[obj.value]);
}

function MM_callJS(jsStr) { //v2.0
  return eval(jsStr)
}



