/**
 *  Major javascript-file for searchResult.jsp, handles all init-methods, global parameters and onchangemethods.
 *
 */


// ---- constants & globals --------
var propertyNext;
var propertyPrevious;
var propertyLast;
var propertyHits;
var propertyHit;
var propertyNoHits;
var propertyTotal;
var propertyRAKName;
var propertyLMSName;
var propertyREGName;
var propertyAdvancedSearch;
var propertyAdvancedSearchUrl;
var propertySearchInfo;
var propertySearchInfoNoHits;
var propertySearchInfoIn;
var propertySearchInfoAnd;
var propertyImages;
var propertyImage;
var propertyRAKDescription;
var propertyLMSDescription;
var propertyREGDescription;
var propertyErrorDescription;
var propertyToManyHits;
var propertyFirst;

var globalSearchresult;
var regFirstMatchToReturn=1;
var lmsFirstMatchToReturn=1;
var globalSpanReg = 0;
var globalSpanLms = 0;
var searchUrl="";
var propertyHelptext;
var propertyBookmark;
var properyTomanySettlementErrorHandler;
var propertyReferens;
var propertyThisReferens;
var propertyEconomical;
var propertyGeneral;
var propertyHundred;

// ---- //constants & globals --------


function loadPage(s){
  if(getCookieWrapper("ms", "load")!=null){
    deleteCookieWrapper("ms", "load");//delete cookie wich indicate that map in simplesearch has been made. This makes sure that map is reloaded when simplesearch is made again.
    window.location.href=s;
  }
  else{
    window.location.href=s;
  }
}


// --- init-methods --------------

function addLoadEvent(funcCall){//Eventhandlers for onload in bodytag
    var oldload = window.onload;
    if (typeof window.onload != 'function'){
        window.onload = funcCall;
    }
    else{
        window.onload = function(){
            if (oldload){
              oldload();
            }
            funcCall();
        }
    }
}

addLoadEvent(function(){
    search();//Init page using eventlistner
})

function search(){

  externalLinks();//set external links

   setCookies(); //set cookies

   setGlobals(); //sets global propertys

    if(document.getElementById("archive").value=="GEOIN"){ //search in geoin and others
      SearchClass.geoSearch(document.getElementById("xMin").value, document.getElementById("yMin").value, document.getElementById("xMax").value, document.getElementById("yMax").value, {callback:geoReceiverFunc, errorHandler:giErrorHandler});
    }

    if(document.getElementById("archive").value=="LMS"){ //search in LMS advanced
       if(document.getElementById("historyId")!=null && document.getElementById("historyId").value!=""){ //searchhistory
       SearchHistoryClass.getSearchHistory(parseInt(document.getElementById("historyId").value), document.getElementById("archive").value, parseInt(document.getElementById("firstMatchToReturnLMS").value), {callback:lmsReceiverFuncAdvanced, errorHandler:majorErrorHandler});
      }
      else{
        var yearMin, yearMax;
        if(document.getElementById("yearMin").value!="")
           yearMin = parseInt(document.getElementById("yearMin").value);
        else
          yearMin=0;
        if(document.getElementById("yearMax").value!="")
           yearMax = parseInt(document.getElementById("yearMax").value);
        else
          yearMax=0;
          SearchClass.lmsSearchAdvanced(document.getElementById("county").value, document.getElementById("parish").value, document.getElementById("settlement").value, document.getElementById("openSearch").value, document.getElementById("task").value, document.getElementById("surveyor").value, yearMin, yearMax, document.getElementById("archive").value, parseInt(document.getElementById("firstMatchToReturnLMS").value), document.getElementById("scanned").value, document.getElementById("mapTypeSelected").value, document.getElementById("rbyselected").value, document.getElementById("mapType").value, {callback:lmsReceiverFuncAdvanced, errorHandler:majorErrorHandler});
      }
    }
    if(document.getElementById("archive").value=="REG"){//Searching in REG advanced
     if(document.getElementById("historyId")!=null && document.getElementById("historyId").value!=""){ //searchhistory
      SearchHistoryClass.getSearchHistory(parseInt(document.getElementById("historyId").value), document.getElementById("archive").value, parseInt(document.getElementById("firstMatchToReturnREG").value), {callback:regReceiverFuncAdvanced, errorHandler:majorErrorHandler});
     }
      else{
        var yearMax;
        if(document.getElementById("yearMax").value!="")
           yearMax = parseInt(document.getElementById("yearMax").value);
        else
          yearMax=0;

        var yearMin;
        if(document.getElementById("yearMin").value!="")
           yearMin = parseInt(document.getElementById("yearMin").value);
        else
         yearMin=0;
         var village="";
         var documentAct="";
         var openSearch="";
         var municipality="";
         var parish="";


         if(document.getElementById("user").value!="member"){
           if(document.getElementById("searchType") && document.getElementById("searchType").value=="v"){
            village=document.getElementById("openSearch").value;
           }
           else if(document.getElementById("searchType") && document.getElementById("searchType").value=="d"){
            documentAct=document.getElementById("openSearch").value;
           }
         }
         if(document.getElementById("user").value!="member"){
           if(document.getElementById("searchTypeMP") && document.getElementById("searchTypeMP").value=="m"){
            municipality=document.getElementById("munParREG").value;
           }
           else if(document.getElementById("searchTypeMP") && document.getElementById("searchTypeMP").value=="p"){
            parish=document.getElementById("munParREG").value;
           }
         }
         else if(document.getElementById("user").value=="member"){
          openSearch=document.getElementById("openSearch").value;
          documentAct=document.getElementById("document").value;
         }

         SearchClass.regSearchAdvanced(village, documentAct, openSearch, municipality, parish, document.getElementById("task").value, document.getElementById("county").value, document.getElementById("frSelected").value,  yearMin, yearMax, document.getElementById("archive").value, parseInt(document.getElementById("firstMatchToReturnREG").value), {callback:regReceiverFuncAdvanced, errorHandler:majorErrorHandler});//kommentera bort när socken och kommun skall in på reg hk
        }
    }
    if(document.getElementById("archive").value=="RAK"){//search in RAK advanced
       if(document.getElementById("historyId")!=null && document.getElementById("historyId").value!=""){ //searchhistory
        SearchHistoryClass.getSearchHistory(parseInt(document.getElementById("historyId").value), document.getElementById("archive").value, parseInt(document.getElementById("firstMatchToReturnRAK").value), {callback:rakReceiverFuncAdvanced, errorHandler:majorErrorHandler});
      }
      else{
        SearchClass.rakSearchAdvanced(document.getElementById("page").value, document.getElementById("series").value, document.getElementById("county").value, document.getElementById("archive").value, parseInt(document.getElementById("firstMatchToReturnRAK").value), {callback:rakReceiverFuncAdvanced, errorHandler:majorErrorHandler});
      }
    }

}

function setGlobals(){
  //fetch rest of globalpropertys from ajaxfacade
  var params= new Array(32);
  params[0] ="searchResult.table.next";
  params[1] ="searchResult.table.previous";
  params[2] ="searchResult.hits";
  params[3] ="searchResult.hit";
  params[4] ="searchResult.hits.total";
  params[5] ="searchResult.hits.none";
  params[6] ="common.rak";
  params[7] ="common.lms";
  params[8] ="common.reg";
  params[9]="common.search.advanced";
  params[10]="menu_url.search.advanced";
  params[11]="searchResult.search.info";
  params[12]="searchResult.search.info.moreHits";
  params[13]="searchResult.search.info.in";
  params[14]="searchResult.search.info.and";
  params[15]="searchResult.search.info.images";
  params[16]="searchResult.search.info.image";
  params[17]="common.archive.info.rak";
  if(document.getElementById("user")){
    if(document.getElementById("user").value=="member"){
      params[18]="common.archive.info.lms.member";
      params[19]="common.archive.info.reg.member";
    }
    else{
      params[18]="common.archive.info.lms";
      params[19]="common.archive.info.reg";
    }
  }
  params[20]="advancedSearchForm.help";
  params[21] ="searchResult.table.last";
  params[22] = "common.error.description";
  params[23] = "searchResult.bookmark";
  params[24] = "searchResult.hits.to.many";
  params[25] = "searchResult.table.first";
  params[26] = "searchForm.validation.toolarge";
  params[27] = "searchForm.lms.showref";
  params[28] = "searchForm.lms.thisshowref";
  params[29] = "common.series.economical";
  params[30] = "common.series.general";
  params[31] = "common.series.hundred";
  PropertyClass.getPropertyValues(params,{callback:setGlobalsReceiverFunc, errorHandler:majorErrorHandler});
}

function setGlobalsReceiverFunc(data){
   propertyNext=data[0];
   propertyPrevious=data[1];
   propertyHits=data[2];
   propertyHit=data[3];
   propertyTotal=data[4];
   propertyNoHits=data[5];
   propertyRAKName=data[6];
   propertyLMSName=data[7];
   propertyREGName=data[8];
   propertyAdvancedSearch=data[9];
   propertyAdvancedSearchUrl=data[10];
   propertySearchInfo=data[11];
   propertySearchInfoNoHits=data[12];
   propertySearchInfoIn=data[13];
   propertySearchInfoAnd=data[14];
   propertyImages=data[15];
   propertyImage=data[16];
   propertyRAKDescription=data[17];
   propertyLMSDescription=data[18];
   propertyREGDescription=data[19];
   propertyHelptext=data[20];
   propertyLast=data[21];
   propertyErrorDescription=data[22];
   propertyBookmark=data[23];
   propertyToManyHits=data[24];
   propertyFirst=data[25];
   properyTomanySettlementErrorHandler=data[26];
   propertyReferens=data[27];
   propertyThisReferens=data[28];
   propertyEconomical=data[29];
   propertyGeneral=data[30];
   propertyHundred=data[31];
}
// ------ /init-methods ---------

// ---- AJAX-reciever methods --------
function geoReceiverFunc(searchresult)
{
  //puts searchresult global to be use for new searches in AQ
  globalSearchresult = searchresult;
  if(searchresult.tooManySettlements){//stop search if tooManySettlements is true
    tomanySettlementErrorHandler(properyTomanySettlementErrorHandler);
  }
  else{

      //search in RAK
      SearchClass.rakSearch(searchresult.documentgroups,  parseInt(document.getElementById("firstMatchToReturnRAK").value), {callback:rakReceiverFunc, errorHandler:rakSearchErrorHandler});

      //search in LMS
      SearchClass.lmsSearch(searchresult.countys, parseInt(document.getElementById("firstMatchToReturnLMS").value), {callback:lmsReceiverFunc, errorHandler:lmsSearchErrorHandler});

      //search in REG
      SearchClass.regSearch(searchresult.countys, parseInt(document.getElementById("firstMatchToReturnREG").value), {callback:regReceiverFunc, errorHandler:regSearchErrorHandler});


     //prints which settlements the search is done for
      var ele = document.getElementById("infoContainer");
      var first=true;
      if(searchresult.countys.length>0){
       ele.appendChild(document.createTextNode(propertySearchInfo+" "));
      for(var i=0; i<searchresult.countys.length; i++){
        if(i<0)
          ele.appendChild(document.createTextNode(" "+propertySearchInfoAnd+" "));
    	for(var j=0; j<searchresult.countys[i].parishs.length; j++){
			for(var k=0; k<searchresult.countys[i].parishs[j].settlements.length; k++){
				if(!first){
					ele.appendChild(document.createTextNode(", "));

				}
				ele.appendChild(document.createTextNode(searchresult.countys[i].parishs[j].settlements[k].name));
                                first=false;
			}
                        ele.appendChild(document.createTextNode(" "+propertySearchInfoIn+" "+searchresult.countys[i].parishs[j].name));
		}
                ele.appendChild(document.createTextNode(", "+searchresult.countys[i].name));
	  }
      }
      else{
        ele.appendChild(document.createTextNode(propertySearchInfoNoHits+" "));
        var link = document.createElement("a");
        link.setAttribute("href", propertyAdvancedSearchUrl);
        link.appendChild(document.createTextNode(propertyAdvancedSearch));
        ele.appendChild(link);
      }
  }
}


// ---- //AJAX-reciever methods --------

// ---- cookies ---------
function setCookies(){

  searchUrl=document.location.href;
  setCookieWrapper("sr", "searchUrl", searchUrl);
}

// ---- // cookies ---------

// --- onclick-methods -----------

function showHideRAKInfo(){
  showHide("rakInfo");
}
function showHideLMSInfo(){
  showHide("lmsInfo");
}
function showHideREGInfo(){
  showHide("regInfo");
}

/**
 * Method for calculating last number
 */
function calculateLast(_last){
  if((_last % 10) == 0){
    _last=parseInt(_last-10+1);
  }else{
    _last=parseInt(_last-(_last % 10)+1);
  }
  return _last;
}

// --- /onclick-methods -----------

// ---- error-methods --------

function rakSearchErrorHandler(errorString, exception) {

  var ele=document.getElementById('RAKhits');
  while (ele.childNodes.length > 0){
  ele.removeChild(ele.firstChild); //remove original text
  }
    //adds header for RAK
     var trow = document.createElement("tr");
     var th1 = document.createElement("th");
     if(document.getElementById("user").value=="member"){
         th1.setAttribute("colSpan", "4");
     }
      else{th1.setAttribute("colSpan", "3");}
    th1.appendChild(document.createTextNode(propertyRAKName));
     trow.appendChild(th1);
     ele.appendChild(trow);
     var trow2 = document.createElement("tr");
     var td = document.createElement("td");
     if(document.getElementById("user").value=="member"){
        td.setAttribute("colSpan", "4");
     }
     else{td.setAttribute("colSpan", "3");}
     td.appendChild(document.createTextNode(exception.msg));
     trow2.appendChild(td);
     ele.appendChild(trow2);
}


function regSearchErrorHandler(errorString, exception) {
  var ele=document.getElementById('REGhits');
  while (ele.childNodes.length > 0){
  ele.removeChild(ele.firstChild); //remove original text
  }
  //adds header for REG
     var trow = document.createElement("tr");
     var th1 = document.createElement("th");
     if(document.getElementById("user").value=="member"){
      th1.setAttribute("colSpan", "4");
     }
     else{th1.setAttribute("colSpan", "3");}
     th1.appendChild(document.createTextNode(propertyREGName));
     trow.appendChild(th1);
     ele.appendChild(trow);
     var trow2 = document.createElement("tr");
     var td = document.createElement("td");
     if(document.getElementById("user").value=="member"){
      td.setAttribute("colSpan", "4");
     }
     else{td.setAttribute("colSpan", "3");}
     td.appendChild(document.createTextNode(exception.msg));
     trow2.appendChild(td);
     ele.appendChild(trow2);
}
function lmsSearchErrorHandler(errorString, exception) {

  var ele=document.getElementById('LMShits');
  while (ele.childNodes.length > 0){
  ele.removeChild(ele.firstChild); //remove original text
  }
    //adds header for LMS
     var trow = document.createElement("tr");
     var th1 = document.createElement("th");
     if(document.getElementById("user").value=="member"){
         th1.setAttribute("colSpan", "4");
     }
      else{th1.setAttribute("colSpan", "3");}
     th1.appendChild(document.createTextNode(propertyLMSName));
     trow.appendChild(th1);
     ele.appendChild(trow);
     var trow2 = document.createElement("tr");
     var td = document.createElement("td");
     if(document.getElementById("user").value=="member"){
        td.setAttribute("colSpan", "4");
     }
     else{td.setAttribute("colSpan", "3");}
     td.appendChild(document.createTextNode(exception.msg));
     trow2.appendChild(td);
     ele.appendChild(trow2);
}

function tomanySettlementErrorHandler(errorString) {

  var ele=document.getElementById('infoContainer');
  while (ele.childNodes.length > 0){
  ele.removeChild(ele.firstChild); //remove original text
  }
  var img = document.createElement("img");
  img.src="../images/error.gif";
  img.alt="";
  ele.appendChild(img); //add warning image

  ele.appendChild(document.createTextNode(errorString));
  //animera meddelandet
  setColor(0);
  ele.style.border="1px solid #f00";
  ele.style.padding="10px";

 if (!document.getElementsByTagName) return;
 var anchor=document.getElementById('result');
  while (anchor.childNodes.length > 0){
  anchor.removeChild(anchor.firstChild); //remove result-table
  }
}

function majorErrorHandler(errorString, exception) {

  var ele=document.getElementById('infoContainer');
  while (ele.childNodes.length > 0){
  ele.removeChild(ele.firstChild); //remove original text
  }
  var img = document.createElement("img");
  img.src="../images/error.gif";
  img.alt="";
  ele.appendChild(img); //add warning image

  if(exception!=null)
    ele.appendChild(document.createTextNode(exception.msg)); //sets error-message text
  else
    ele.appendChild(document.createTextNode(propertyErrorDescription));
  //animera meddelandet
  setColor(0);
  ele.style.border="1px solid #f00";
  ele.style.padding="10px";

 if (!document.getElementsByTagName) return;
 var anchor=document.getElementById('result');
  while (anchor.childNodes.length > 0){
  anchor.removeChild(anchor.firstChild); //remove result-table
  }
}

function giErrorHandler(errorString, exception) {
  var ele=document.getElementById('infoContainer');
  while (ele.childNodes.length > 0){
  ele.removeChild(ele.firstChild); //remove original text
  }
  var img = document.createElement("img");
  img.src="../images/error.gif";
  img.alt="";
  ele.appendChild(img); //add warning image
  ele.appendChild(document.createTextNode(exception.msg)); //sets error-message text

  //ads link to advanced search
  var link = document.createElement("a");
  link.setAttribute("href", propertyAdvancedSearchUrl);
  link.appendChild(document.createTextNode(propertyAdvancedSearch));
  ele.appendChild(link);

  //animera meddelandet
  setColor(0);
  ele.style.border="1px solid #f00";
  ele.style.padding="10px";

   if (!document.getElementsByTagName) return;
      var anchor=document.getElementById('result');
   while (anchor.childNodes.length > 0){
      anchor.removeChild(anchor.firstChild); //remove result-table
  }
}


// ---- / error-methods --------
