/*
AUTHOR : Julien BOTTEMANNE (julien@domlike.net)
DATE : 2006/07/16
Visit my blog : www.domlike.net
or contact me : julien@domlike.net
*/

// globale variable  Initialisation 
var Lines = new Array();
var iLines = 0;
var isLuckSearch = false;
var timercount = 0;
var timestart  = null;
var logError = '';

// debugging vars
var searchDebug = '';
var notesDebug = '';

var AS_Proxy='';
var AS_New_Windows='';
var AS_Query_Syntax='';
var AS_Agent_Name='';
var AS_Agent_MaxDoc='';
var AS_DB_Path='';
var AS_SRV_Path='';
var AS_Result_Header='';
var AS_Result_RowS='';
var AS_Result_RowE='';
var AS_Result_ColS_1='';
var AS_Result_ColS_2='';
var AS_Result_ColS_3='';
var AS_Result_ColS_4='';
var AS_Result_ColS_5='';
var AS_Result_ColS_6='';
var AS_Result_ColS_7='';
var AS_Result_ColS_8='';
var AS_Result_ColS_9='';
var AS_Result_ColS_10='';
var AS_Result_ColE_1='';
var AS_Result_ColE_2='';
var AS_Result_ColE_3='';
var AS_Result_ColE_4='';
var AS_Result_ColE_5='';
var AS_Result_ColE_6='';
var AS_Result_ColE_7='';
var AS_Result_ColE_8='';
var AS_Result_ColE_9='';
var AS_Result_ColE_10='';
var AS_Result_Footer='';
var AS_Result_Link='';
var AS_Result_ID_NB='';
var AS_Result_ID='';
var AS_Result_ID_Activity='';
var AS_LogError_ID='';
var AS_Result_Sort_Column='';
var AS_Result_Sort_Type='';
var AS_Field_Name_Agt='';
var AS_Field_Name_1='';
var AS_Field_Name_2='';
var AS_Field_Name_3='';
var AS_Field_Name_4='';
var AS_Field_Name_5='';
var AS_Field_Name_Dsp='';

var AS_DB_Filter = '';

var SearchString = '';
var suchString = '';

var User_AS_Result_Sort_Column = '';
var User_AS_Result_Sort_Type = '';

var NotInitialize = true;

function initialize()
{
	// handler
	if (NotInitialize)
	{				
		Ajax.Responders.register({
			onCreate: function(){
				Element.show(AS_Result_ID_Activity);
			},
			onComplete: function() {	
				if(Ajax.activeRequestCount == 0){
					SortLinesArray();
					ShowLines();
					Element.show(AS_Result_ID);
					Element.hide(AS_Result_ID_Activity);
				}				
	 		}
		});
	}		
}

function callLuck()
{
	isLuckSearch=true;
	callSearch();
}

// function callDomgle()
function callDomgle()
{
	isLuckSearch=false;
	callSearch();
}

function callSearch()
{

	initialize();
	NotInitialize = false;
	timestart   = new Date();
	iLines = 0;
	Lines = new Array();
	logError = '';
	GoogleToNotesSearch.init();
	
	// Translate query to the choosen syntax
	if (AS_Query_Syntax=='google')
		userQuery = GoogleToNotesSearch.parse(SearchString)
	else
		userQuery = replaceString(SearchString,'&','AND')
		
	for (var i=0; i<AS_DB_Path.length; i++)
	{

		if ((AS_DB_Filter == '' ) || (AS_DB_Filter[i] == '' ) || (AS_DB_Filter[i] == ' ' ))
			userQueryIntern = userQuery
		else
			userQueryIntern = "(" + userQuery + ") AND " + AS_DB_Filter[i];

		//Create a Hash of the parameters
		var a=$H(
			{
				SearchString: userQueryIntern,
				ag_doc_Count: AS_Agent_MaxDoc,
				AS_Field_Name_1: AS_Field_Name_1,
				AS_Field_Name_2: AS_Field_Name_2,
				AS_Field_Name_3: AS_Field_Name_3,
				AS_Field_Name_4: AS_Field_Name_4,
				AS_Field_Name_5: AS_Field_Name_5
			}
		);

		// Call each targeted db
	
		var targetParams =a.toQueryString();
		var viewPath = AS_Agent_Name+'?OpenAgent';

		if(AS_Proxy=='yes'){
			url=urlBase()+'/(proxy)?OpenAgent'
			var params='';
			params='urlToGet='+AS_SRV_Path[i]+AS_DB_Path[i]+viewPath+"&"+targetParams+'&rdm='+randomNumber();
		}else{
			var params=targetParams;
			var url = AS_SRV_Path[i]+AS_DB_Path[i]+viewPath;
		}

		// Falls wir mehr Infos zur Fehlersuche brauchen, so sollten wir uns ein wenig merken
		if (searchDebug=='on') {
			notesDebug = '<br><table>';
			notesDebug += '<tr><td style="width:20%"><b>Details</b></td><td style="width:30%"></td></tr>';
			notesDebug += '<tr><td><b>Server</b></td><td>'+AS_SRV_Path[i]+'</td></tr>';
			notesDebug += '<tr><td><b>Database-Path</b></td><td>'+AS_DB_Path[i]+'</td></tr>';
			notesDebug += '<tr><td><b>Query</b></td><td>'+userQueryIntern+'</td></tr>';
		}
		
		eval("var myAjax = new Ajax.Request( url, { method: 'get', parameters: params,onComplete: BuildLinesArray,onFailure: function(t) {logError+='Error : '+t.status+ ' -- '+t.statusText+' -- location : " + url +"<br>'} })");
	}
}


function BuildLinesArray(originalRequest)
{
	var zaehler;
	
	if(originalRequest.status==200){
		try
		{
			var xmldoc = originalRequest.responseXML;
			var root = xmldoc.documentElement;
			results = root.getElementsByTagName("viewentry");
			for (var zaehler=0; zaehler<results.length; zaehler++)
			{
				Lines[iLines]=new Line(results[zaehler].getElementsByTagName("entrydata"));
				iLines++;
			}
		}catch (e){
			logError+='XML parser error : Could not analyse results from one request<br>';
			logError += notesDebug;
			if (searchDebug=='on') {
				if (results==null) {
					logError += '<tr><td><b>Error</b></td><td>Cannot interpete the reponseXML</td></tr>';
				}
			logError += "</table><br>"	
			}
		}
	}
}

// Line object creation
function Line(a)
{
	var iProp;
	
	// @todo url kuerzen
	try
	{
	
		for (iProp=0; iProp<AS_Field_Name_Agt.length; iProp++)
		{
			macro="this."+AS_Field_Name_Agt[iProp]+"=getInnerText (a[iProp]);";
			eval(macro);
		}
	} catch (e) {
		if (searchDebug=='on') {
			logError += notesDebug;
			logError += '<tr><td><b>Field</b></td><td>'+AS_Field_Name_Agt[iProp]+'</td></tr>';
			if (iProp>0)
				logError += '<tr><td><b>Document</b></td><td>' + getInnerText(a[0])+'</td></tr>';
		}
		logError += '</table><br>'
	}
}

// Sort results
function SortLinesArray(){
	Lines=Lines.sort(SortLines);
}

function SortLines(a,b){
	A=eval('a.'+AS_Result_Sort_Column);
	B=eval('b.'+AS_Result_Sort_Column);
	if(AS_Result_Sort_Type=='des'){ return A>B?-1:A<B?1:0;}else{ return A>B?1:A<B?-1:0;}
}


//*********** getInnerText **************
function getInnerText (node) {
	if (typeof node.textContent != 'undefined') {
		return node.textContent;
	}else if (typeof node.innerText != 'undefined') {
		return node.innerText;
	}else if (typeof node.text != 'undefined') {
		return node.text;
	}else {
		switch (node.nodeType) {
		case 3:
		case 4:
			return node.nodeValue;
		break;
		case 1:
		case 11:
			var innerText = '';
			for (var i = 0; i < node.childNodes.length; i++) {
				innerText += getInnerText(node.childNodes[i]);
			}
			return innerText;
			break;
		default:
			return '';
		}
	}
}


//************* ShowLines ***************
// Display lines
function ShowLines( ){

if (isLuckSearch && Lines.length>0) {
	window.location.href=Lines[0].url;
	return;
}

var string = new Array();
var iLines=0;
var count=Lines.length;
var newText  = '';

// Delete Lines
DeleteLines();

// Result Header
if (Lines.length>0)
	string.push(AS_Result_Header)
else
	string.push('<br><h2 class="clearfix"><span class="gauche">Keine Ergebnisse gefunden f\u00FCr "'+SearchString+'"</span><span id="nbResult" class="droite"></span></h2>');


// Lines loop
for (iLines=0; iLines<Lines.length; iLines++)
{
	//Write the start row 
	string.push(AS_Result_RowS);
	// Columns loops
	for (iCol=0; iCol < AS_Field_Name_Dsp.length; iCol++)
	{
		macro='AS_Result_ColS_'+(iCol+1);
		string.push(eval(macro));
		if (iCol==AS_Result_Link){
				if (AS_New_Windows=='yes') {
					//target = 'target="blank"' 
					var winTarget = "_blank";
					width = "800";
					heigth = "600";
					target = "javascript:openAWindow(\'"+encodeURI(Lines[iLines].url)+"\',\'"+winTarget+"\',\'"+width+"\',\'"+heigth+"\',\'100\',\'100\')";
				} else {
					 target = ''}
				//string.push('<a href="'+Lines[iLines].url+'" '+target+'>');
				string.push('<a href="'+target+'">');
				macro = 'Lines[iLines].'+AS_Field_Name_Dsp[iCol];
				string.push(eval(macro));
				string.push('</a>');	
		}else{
				macro = 'Lines[iLines].'+AS_Field_Name_Dsp[iCol];
				string.push(eval(macro));
		}
		macro='AS_Result_ColE_'+(iCol+1);
		string.push(eval(macro));
	} // end for iCol loop
	
	//Write the end row 
	string.push(AS_Result_RowE);
}

string.push(AS_Result_Footer);

var writestring = string.join('');

$(AS_Result_ID).innerHTML=writestring;
$(AS_Result_ID_NB).innerHTML=count;

// Print Time Process
var timeend = new Date();
var timedifference = timeend.getTime() - timestart
timeend.setTime(timedifference);
var seconds_passed = timeend.getSeconds();
var milliseconds_passed = timeend.getMilliseconds();
//$(AS_Result_ID_NB).innerHTML=count+' ('+seconds_passed+'.'+milliseconds_passed+' seconds)';
$(AS_Result_ID_NB).innerHTML='Die Suche liefert ' + count+' Treffer.';
// Print Error if needed
if(logError!=''){
		$(AS_LogError_ID).innerHTML='Search processing error :<br>'+logError;
		Element.show(AS_LogError_ID);
}
}

function DeleteLines(){
	$(AS_Result_ID).innerHTML='';
}

function replaceString(sString, sReplaceThis, sWithThis) { 
    if (sReplaceThis != "" && sReplaceThis != sWithThis) {
      var counter = 0;
      var start = 0;
      var before = "";
      var after = "";
      while (counter<sString.length) {
        start = sString.indexOf(sReplaceThis, counter);
        if (start == -1){
         break;
         } else {
           before = sString.substr(0, start);
           after = sString.substr(start + sReplaceThis.length, sString.length);
           sString = before + sWithThis + after;
           counter = before.length + sWithThis.length;
          }
        }
      }
   return sString;
  }
  
function randomNumber() {
	return (Math.floor((99999999) * Math.random()+1));
}
function urlBase() {
var pathname = window.location.href;
return pathname.substring(0,(pathname.indexOf('.nsf')+4)) ;
}

