var IDs = Array();

function dataOutputOrganizations(tag){

  var output = "";
  var searchStr = buildDataSearchString("organizations");
//alert("searchStr is now: "+searchStr);    
  
  $.ajax({ 
	  method: "get", 
	  url: searchEngine,
	  data: searchStr,
	  success: function(xml){
		output += "<select class=\"filterOption\" id=\"sourceSelect\" name=\"myselectbox\" tabindex=\"2\"><option value=\"0\">Select an Organization to Search...</option>";
		$("value",xml).each(function() {
//alert($(this).text());
		  output += "<option value=\""+ $(this).text() +"\">" + $(this).text() + "</option>";
		});
		output += "</select>";
		$(tag).html(output);
      }
    });
	
}

function dataSearch(mode,ID,inputString){
  $("#dataResults").html("<img src=\""+installDir+"images/ajax-loader.gif\" class=\"ajaxloader\" />");	
  var searchStr = "";
  
  if(mode=="cookie"){
    //Check to see if there is a cookie
	var cookie = "";
	if(readCookie('pastSearch')){
      cookie = readCookie('pastSearch');
	  searchStr = buildDataSearchString(cookie,undefined,undefined);
    }
  }else if(mode=="string"){	
    if(inputString)searchStr = "searchStr=" + inputString;
  }else if(mode=="record"){
    searchStr = buildDataSearchString(undefined,ID,undefined);
  }else{
    searchStr = buildDataSearchString(undefined,undefined,undefined);
  }
  
  if(searchStr!=""){
    //Write a cookie of the search string if we didn't search by ID, otherwise don't write the cookie
	if(mode!="record")createCookie('pastSearch',searchStr,.1);
//alert(searchStr);	
	//Send the Ajax request
    $.ajax({ 
	  method: "get", 
	  url: searchEngine,    //Should be a config option
	  data: searchStr,
	  success: function(xml){
	    if(ID==undefined){
		  outputRecords(xml);
		}else{
		  outputDataRecord(xml);
		}
      }
    });
  }
}

function buildDataSearchString(inputStr,ID,parameters){
  var searchStr = "";
  if(parameters==undefined)parameters = Array();
  if(inputStr==undefined){
    //searchStr += "searchStr=clearinghouse<:>search<::>Category<:>Elevation";
	
	searchStr += "searchStr=clearinghouse<:>search<::>";

	var flag=0;
	//Filters
	
	//ID filter
	if(ID){
	  flag=1;
	  searchStr += "ID<:>\"" + ID + "\"<,>";
	}else{
	//Keyword filter
	var keywords = "";
	if(parameters["Keywords"]){
	  keywords = parameters["Keywords"];
	}else{
	  keywords = $("#panelKeyword").val();
	}
	//var keywords = $("#panelKeyword").val();
	if(keywords){
      flag=1;
      if(keywords.indexOf(":")==-1){	
        searchStr += "Keywords<:>" + keywords;
      }else{
	    //Make sure they're not trying to get to unpublished records
	    var field = keywords.substring(0,keywords.indexOf(":"));
	    fieldUpper = field.toUpperCase();
	    if(fieldUpper != "PUBLISHED"){
		  var value = keywords.substring(keywords.indexOf(":")+1,keywords.length);
		  searchStr += field + "<:>" + value;
        }
	  }	
	  searchStr += "<:OR:><,>";
	  
	  //Make it search datasetName as well
	  searchStr +="datasetName<:>" + keywords + "<,>";
    }
	
	//category filter
	var category = $("#panelCategory").val();
	if(category){
      if(category!=0){
        flag=1;
        searchStr += "Category<:>\"" + category + "\"<,>";
      }
	}

	//County filter
	var county = $("#countySelect").val();
	if(county){
      if(county!=5400){
        flag=1;
        searchStr += "Location<:>" + county + "<,>";
      }
	}
	
	//Source filter
	var sourceSelect = $("#sourceSelect").val();
	if(sourceSelect){
      if(sourceSelect!=0){
        flag=1;
        searchStr += "Source1<:>" + sourceSelect + "<:OR:><,>Source2<:>" + sourceSelect + "<,>";
      }
	}
	
	//Web Services filter
	if(document.getElementById("webServices")){
	  if(document.getElementById("webServices").checked){
	    flag=1;
        searchStr += "Service<:>1" + "<,>";
	  }
	}
	
	}
	//Clearn up final deliminator
	if(flag)searchStr = searchStr.substr(0,searchStr.length-3);
  }else if(inputStr == "organizations"){
    searchStr = "searchStr=clearinghouse<:>search<::>Source1<:>Unique<,>Source2<:>Unique";
  }else{
    searchStr = inputStr;
  }

//alert("searchStr is now: "+searchStr);  
  return(searchStr);
}

function createCookie(name,value,hours) {
	if (hours) {
		var date = new Date();
		date.setTime(date.getTime()+(hours*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}


function outputRecords(xml){
    var output=outputRecordsTable(xml);

	      if(output != ""){
	        $("#dataResults").html(output);	
	        $("#resultsTable").tablesorter({ 
                                 sortList: [[0,0]],
                                 headers: {2: {sorter: false}, 
                                           3: {sorter: false}
                                          }
            }); 
	      }else{
	        $("#dataResults").html("<h1>No Records Matched Your Search.  Please Refine Your Search and Try Again.</h1>");	
	      }
	      $("#returnedResults").show();
}
  
function outputRecordsTable(xml){
//alert("Starting output Records table");

    var output = "";
	var header = "<table id=\"resultsTable\" class=\"tablesorter\" cellspacing=\"0\"><thead><tr><th class=\"colDataset\" id=\"resultsTableDataSet\">Data Set</th><th class=\"colCategory\" id=\"resultsTableCategory\">Category</th><th class=\"colIcon\">Summary Data</th><th class=\"colIcon\">Full Record</th><th class=\"colIcon\">Download</th><th class=\"colIcon\">Web Service</th></tr></thead><tbody id=\"resultsBody\">";
	var footer = "</tbody></table>";
	var body = Array();
	var rowH = "<tr>";
	var rowF = "</tr>";
    var i=0;
	if(xml){
	  
	  $("record",xml).each(function() {
	    var ID = $(this).find("ID").text();
	    if(ID){
		  
		  IDs[i]=ID;

          lines = getSeperateLines($(this).find("datasetName").text());
		  var datasetName = "<td class=\"colCategory\"><a href=\""+installDir+"data/dataset.php?ID=" + ID + "\" title=\"Full Record\">" + lines[0];
		  if(lines[1]){
		    datasetName += "<br />"+lines[1];
		  }
		  datasetName += "</a></td>";
		  
		  var Category = "<td class=\"colCategory\">" + $(this).find("Category").text(); + "</td>";
		  
		  var SummaryData = "<td><img src=\""+installDir+"images/icon-expand.gif\" alt=\"Summary Data\" onClick=\"summaryPopover(" + $(this).find("ID").text() + ");\" class=\"expandImage\" />";
		  var hiddenBriefMetadata = "<div id=\""+$(this).find("ID").text()+"\" class=\"hide\"><h3 class=\"closeButton\" onClick=\"colapseSummary(" + $(this).find("ID").text() + ");\">Close Window <img src=\"../images/delete.gif\" /></h3><ul class=\"expandDetails\"><li><h3>Description</h3>"+ $(this).find("Description").text() + "</li><li><h3>Scale</h3>" + $(this).find("Scale").text() + "</li>";
          var year = $(this).find("creationDate").text().substr(0,4);
		  hiddenBriefMetadata += "<li><h3>Date Created</h3>" + year + "</li>";
		  hiddenBriefMetadata += "<li><h3>Data Source</h3>" + $(this).find("Source1").text() + "<br />" + $(this).find("Source2").text() + "</li></ul></div>";
		  SummaryData += hiddenBriefMetadata + "</td>";
		  
		  var FullRecord = "<td><a href=\"dataset.php?ID=" + $(this).find("ID").text() + "\" title=\"Full Record\"><img src=\""+installDir+"images/icon-full-record.gif\" alt=\"Full Record\" /></a></td>";
		  
		  if($(this).find("Downloadable").text()==1){
		    var Download = "<td><div class=\"downloadList\" onClick=\"expandDownload("+ $(this).find("ID").text() +");\"><img src=\""+installDir+"images/icon-download.gif\" alt=\"Main Download Link\" /> Download</div>";
			var hiddenDownload = "<div id=\""+$(this).find("ID").text()+"_DL\" class=\"hide\"><h3 class=\"downloadBoxHeader\">Click Below To Download <img src=\"../images/delete.gif\" onClick=\"colapseDownload(" + $(this).find("ID").text() + ");\" class=\"downloadClose\" /></h3><ul class=\"downloadLink\">";
		    if($(this).find("downloadableLink1").text()){
		      hiddenDownload += "<li><a href=\""+$(this).find("downloadableLink1").text()+"\">"+$(this).find("downloadableLabel1").text()+"</a></li>";
		    }
		    if($(this).find("downloadableLink2").text()){
		      hiddenDownload += "<li><a href=\""+$(this).find("downloadableLink2").text()+"\">"+$(this).find("downloadableLabel2").text()+"</a></li>";
		    }
		    if($(this).find("downloadableLink3").text()){
		      hiddenDownload += "<li><a href=\""+$(this).find("downloadableLink3").text()+"\">"+$(this).find("downloadableLabel3").text()+"</a></li>";
		    }
		    hiddenDownload += "</ul></div>";
			Download += hiddenDownload + "</td>";
		  }else{
		    var Download = "<td></td>";
			var hiddenDownload = "";
		  }

		  if($(this).find("Service").text()==1){
		    var WebService = "<td><div class=\"downloadList\" onClick=\"expandWebservice("+ $(this).find("ID").text() +");\"><img src=\""+installDir+"images/icon-service.gif\" alt=\"Web Service Link\" /></div>";
			var hiddenWebservice = "<div id=\""+$(this).find("ID").text()+"_WS\" class=\"hide\"><h3 class=\"webserviceBoxHeader\">Web Service Information <img src=\"../images/delete.gif\" onClick=\"colapseWebservice(" + $(this).find("ID").text() + ");\" class=\"webserviceClose\" /></h3>";
			//hiddenWebservice += "<ol>";
			hiddenWebservice += "<div class=\"expandService\">";
//WITH LISTS
			if($(this).find("webServiceServerName1").text()){
			  hiddenWebservice += "<ul class=\"webserviceTable\">";
			  hiddenWebservice += "<li class=\"webserviceTable\"><h3 class=\"webserviceLabel\">Server Name:</h3> "+$(this).find("webServiceServerName1").text()+"</li>";
			  hiddenWebservice += "<li class=\"webserviceTable\"><h3 class=\"webserviceLabel\">Service Name:</h3> "+$(this).find("webServiceServiceName1").text()+"</li>";
			  hiddenWebservice += "<li class=\"webserviceTable\"><h3 class=\"webserviceLabel\">Layer Name:</h3> "+$(this).find("webServiceLayerName1").text()+"</li>";
			  hiddenWebservice += "<ul><br />";
			}
			if($(this).find("webServiceServerName2").text()){
			  hiddenWebservice += "<ul class=\"webserviceTable\">";
			  hiddenWebservice += "<li class=\"webserviceTable\"><h3 class=\"webserviceLabel\">Server Name:</h3> "+$(this).find("webServiceServerName2").text()+"</li>";
			  hiddenWebservice += "<li class=\"webserviceTable\"><h3 class=\"webserviceLabel\">Service Name:</h3> "+$(this).find("webServiceServiceName2").text()+"</li>";
			  hiddenWebservice += "<li class=\"webserviceTable\"><h3 class=\"webserviceLabel\">Layer Name:</h3> "+$(this).find("webServiceLayerName2").text()+"</li>";
			  hiddenWebservice += "<ul><br />";
			}
			if($(this).find("webServiceServerName3").text()){
			  hiddenWebservice += "<ul class=\"webserviceTable\">";
			  hiddenWebservice += "<li class=\"webserviceTable\">Server Name: "+$(this).find("webServiceServerName2").text()+"</li>";
			  hiddenWebservice += "<li class=\"webserviceTable\">Service Name: "+$(this).find("webServiceServiceName2").text()+"</li>";
			  hiddenWebservice += "<li class=\"webserviceTable\">Layer Name: "+$(this).find("webServiceLayerName2").text()+"</li>";
			  hiddenWebservice += "<ul><br />";
			}
			hiddenWebservice += "</div></div>";
//WITH TABLES			
			/*
		    if($(this).find("webServiceServerName1").text()){
		      hiddenWebservice += "<li><table class=\"webserviceTable\">";
		      hiddenWebservice += "<tr><th class=\"webserviceTable\">Server Name</th><td class=\"webserviceTable\">"+$(this).find("webServiceServerName1").text()+"</td></tr>";
			  hiddenWebservice += "<tr><th class=\"webserviceTable\">Service Name</th><td class=\"webserviceTable\">"+$(this).find("webServiceServiceName1").text()+"</td></tr>";
			  hiddenWebservice += "<tr><th class=\"webserviceTable\">Layer Name</th><td class=\"webserviceTable\">"+$(this).find("webServiceLayerName1").text()+"</td></tr>";
			  hiddenWebservice += "</table></li><br />";
		    }
		    if($(this).find("webServiceServerName2").text()){
		      hiddenWebservice += "<li><table class=\"webserviceTable\">";		  
		      hiddenWebservice += "<tr><th class=\"webserviceTable\">Server Name</th><td class=\"webserviceTable\">"+$(this).find("webServiceServerName2").text()+"</td></tr>";
			  hiddenWebservice += "<tr><th class=\"webserviceTable\">Service Name</th><td class=\"webserviceTable\">"+$(this).find("webServiceServiceName2").text()+"</td></tr>";
			  hiddenWebservice += "<tr><th class=\"webserviceTable\">Layer Name</th><td class=\"webserviceTable\">"+$(this).find("webServiceLayerName2").text()+"</td></tr>";
			  hiddenWebservice += "</table></li><br />";
		    }
		    if($(this).find("webServiceServerName3").text()){
		      hiddenWebservice += "<li><table class=\"webserviceTable\">";		  
		      hiddenWebservice += "<tr><th class=\"webserviceTable\">Server Name</th><td class=\"webserviceTable\">"+$(this).find("webServiceServerName3").text()+"</td></tr>";
			  hiddenWebservice += "<tr><th class=\"webserviceTable\">Service Name</th><td class=\"webserviceTable\">"+$(this).find("webServiceServiceName3").text()+"</td></tr>";
			  hiddenWebservice += "<tr><th class=\"webserviceTable\">Layer Name</th><td class=\"webserviceTable\">"+$(this).find("webServiceLayerName3").text()+"</td></tr>";
			  hiddenWebservice += "</table></li>";
		    }
			
		    hiddenWebservice += "</ol></div>";
			*/
		  
			WebService += hiddenWebservice + "</td>";
          }else{
            var WebService = "<td></td>";
          }	

		  body[i] = rowH + datasetName + Category + SummaryData + FullRecord + Download + WebService + rowF;
		  i++;
		}
	  });
	  
	  //Create the output
	  output = header;
	  for(j=0;j<body.length;j++){
	    output += body[j];
	  }
	  output += footer;
	}
	
    if(i==0)output="<h1 class=\"noData\">No Records Matched Your Search.  Please Refine Your Search and Try Again.</h1>";
  
	$("#panelSearchButton").removeClass("searchButtonActive");
    return(output);
  }
  
  function summaryPopover(id){
    var showID = "#"+id;
	clearPopOvers(id,"","summaryDataHover");
    $(showID).toggleClass("hide");
	$(showID).toggleClass("summaryDataHover");	
  }
  
  function colapseSummary(id){
    var showID = "#"+id;
    $(showID).toggleClass("hide");
  }
  
  function expandDownload(id){
    var x = "#" + id + "_DL";
	clearPopOvers(id,"_DL","downloadDataHover");
	$(x).toggleClass("hide");
	$(x).toggleClass("downloadDataHover");
    //alert(x);
  }
  
  function colapseDownload(id){
    var x = "#" + id + "_DL";
	$(x).toggleClass("hide");
  }
  
  function expandWebservice(id){
    var x = "#" + id + "_WS";
	clearPopOvers(id,"_WS","webseriviceHover");
	$(x).toggleClass("hide");
	$(x).toggleClass("webseriviceHover");
	//alert(x);
  }
  
  function colapseWebservice(id){
    var x = "#" + id + "_WS";
	$(x).toggleClass("hide");
  }
  
  function clearPopOvers(id,addText,offClass){
	var hideID = "";
	for(i=0;i<IDs.length;i++){
	  if(id != IDs[i]){
	    hideID = "#"+IDs[i]+addText;
	    $(hideID).addClass("hide");
	    $(hideID).removeClass(offClass);
	  }
	}  
  }
  
  function getSeperateLines(text){
    var maxChars = 50;
    textArray = Array();
    if(text.length > maxChars){
	  var words = text.split(" ");
	  var totalLength = 0;
	  textArray[0] = "";
	  textArray[1] = "";
	  for(i = 0; i < words.length; i++){
	    totalLength += words[i].length;
	    if(totalLength < maxChars){
		  textArray[0]+=words[i] + " ";
		}else{
		  textArray[1]+=words[i] + " ";
		}
	  }
	}else{
	  textArray[0]=text;
	}
	return(textArray);
  }
