var REQUEST_COUNTER = 0;
var MAX_CATG_HITS_GLOBAL = 10;
var MAX_TOTAL_HITS_GLOBAL = 1000;
var MAX_CATG_HITS = 40;

var s_searching_for = 'Søker etter';
var s_search_for = 'Søk etter';
var s_please_wait = 'vennligst vent';
var s_products = 'Produkter';
var s_no_products = 'gir ingen treff';
var s_too_many_products = 'gir for mange treff';
var s_no_hits = 'treff';
var s_search_title = 'Søkeresultat';
var s_search_pre_text = 'For';
var s_products_match = 'produkter funnet, ';
var s_products_match_single = 'produkt funnet, ';
var s_articles_match = 'artikler funnet.';
var s_articles_match_single = 'artikkel funnet.';
var s_products_listed = 'produkter vises i resultatlisten.';
var s_products_listed_single = 'produkt vises i resultatlisten.';
var s_clear_search_results = 'Fjern søk';
var s_productnu = 'Produktnr: ';
var s_error_install = 'WebOn ajax søk er ikke riktig satt opp!';
var s_goto_ptype_search = '&raquo; Vis alle treff...';

function getSearchSettings (search_id) {
	var settings = $H();
	switch (search_id) {
		case 'search_string':
			settings.set('statusMonitor', 'statusMonitor');
			settings.set('container', 'search_list');
			settings.set('show_id', 'tab_generic_2');
			settings.set('hide_id', 'tab_generic_1');
			break;
		case 'search':
			settings.set('statusMonitor', 'statusMonGlobal');
			settings.set('container', 'search_list_global');
			settings.set('show_id', 'bd');
			settings.set('hide_id', 'globalsearch');
			break;
	}
	settings.set('ptypes', $H({'tele': 'Mobil', 'spill': 'Spill', 'film': 'Film', 'multimedia': 'Lyd & Bilde', 'data': 'Data', 'innhold': 'Innhold', 'download': 'Download'}));
	return settings;
}

function dynamicSearch (search_id, ptype) {
  var settings = getSearchSettings(search_id);
  var el = $( search_id );  
  if ( el == undefined ) { return; }
  
  if(el.setAttribute) {el.setAttribute('autocomplete','off');}
  var text = el.value;
  if ( text.length < MIN_SEARCH_CHAR ) {
    ++REQUEST_COUNTER;
    closeSearch(search_id, false, settings);
	return;
  }
  var statusMonitor = $( settings.get('statusMonitor') );
  var origcontainer = $( settings.get('container') );
  if (!statusMonitor || !origcontainer) {
  	alert(s_err_install);
	return;
  }
  var container = origcontainer;
  container.id = settings.get('container');
  if (ptype == undefined) { ptype = ''; }
  statusMonitor.innerHTML = s_searching_for + ' <em>'+ text +'</em>, ' + s_please_wait + '...';

  var thisCounter = ++REQUEST_COUNTER;
  var handler = function( hreq ) {
    if ( REQUEST_COUNTER != thisCounter ) { return; }
    var json = hreq.responseText.split( '__boundary__' );
    var data = eval("(" + json[1] + ")");
    if ( data.listing[0] == undefined) {
      if (!el.className.match(/warning$/)) { el.className = el.className + ' warning'; }
      statusMonitor.innerHTML = s_search_for + ' <em>'+ text +'</em> ' + s_no_products + '.';
    } else if (data.listing.length > MAX_TOTAL_HITS_GLOBAL && MAX_TOTAL_HITS_GLOBAL != 0) {
      if (!el.className.match(/warning$/)) { el.className = el.className + ' warning'; }
      statusMonitor.innerHTML = s_search_for + ' <em>'+ text +'</em> ' + s_too_many_products + '.' + data.listing.length;
    } else {
      el.className = el.className.replace(/warning$/, "");
    }
    if (ptype != '') {
      displaySearchResultCategory( settings, statusMonitor, container, text, ptype, data );
    } else {
      displaySearchResultGlobal( settings, statusMonitor, container, text, data);
    }
  }
  var limit = (ptype) ? MAX_CATG_HITS : MAX_TOTAL_HITS_GLOBAL;
  var criterias = '';
  if (ptype != '') { criterias = getSearchCriterias(false); }
  var url = (isSEF ? '/ajax-search/?ptype=' : URL_BASE + 'func=search.ajax_search&ptype=') + ptype + '&limit=' + limit + criterias + '&input='+ text;

  new Ajax.Request( url, { onSuccess: handler } );
  do_switch(settings, settings.get('show_id'));
}

function displaySearchResultCategory ( settings, statusMonitor, container, text, ptype, data ) {
  var totalHits = 0;
  var list = document.createElement("ul");
  var productResult = $('sefL0').value ? $('sefL0').value : 'product-result';

  if(data.listing.length > 0) {
    var pageTrackerSearch = _gat._getTracker("UA-683183-1");
    pageTrackerSearch._trackPageview("/sok/sok.cgi?sokekategori="+ptype+"&treff=ja&soketekst="+text);
  }
  else {
    var pageTrackerSearch = _gat._getTracker("UA-683183-1");
    pageTrackerSearch._trackPageview("/sok/ikketreff/sok.cgi?sokekategori="+ptype+"&treff=nei&soketekst="+text);
  }

  // Loop through search result
  for ( var i=0; i < data.listing.length; i++ ) {
    if (totalHits >= MAX_CATG_HITS && MAX_CATG_HITS != 0) {
      break;
    }
    // Create new search result row to the corresponding category table
    var row = data.listing[i];

    totalHits++;

    // Add search result to the corresponding category table
    var a = document.createElement( 'a' );
    a.innerHTML = row.TITLE;

    a.href = isSEF ? '/'+productResult+'/'+(row.SEFURL ? row.SEFURL+'/':'')
                   : URL_BASE + 'func=catalog.show&table=PRODUCT&categorynu=&func_id='+ row.PRODUCT_ID + '&catsearch=' + escape(text) + getSearchCriterias(true);

	var newNode = document.createElement("li");
	newNode.appendChild(a);
	list.appendChild(newNode);
  }

  // Show number of search hits in the status area
  var txt = (data.listing.length == 1) ? s_products_match_single : s_products_match;
  var statusstr = data.total +' ' + txt + ' <em>'+ text +'</em>';
  // If more were found than we can show, give feedback of the number shown
  if (data.total > MAX_CATG_HITS) {
    var txt2 = (data.listing.length == 1) ? s_products_listed_single : s_products_listed;
    statusstr += '<br>' + MAX_CATG_HITS + ' ' + txt2;
  }

  statusMonitor.innerHTML = statusstr;
  container.innerHTML = '';
  container.appendChild(list);
}

function displaySearchResultGlobal ( settings, statusMonitor, container, text, data ) {
  if (data.listing.length > MAX_TOTAL_HITS_GLOBAL && MAX_TOTAL_HITS_GLOBAL != 0) {
    return;
  }
  if(data.listing.length > 0) {
    var pageTrackerSearch = _gat._getTracker("UA-683183-1");
    pageTrackerSearch._trackPageview("/sok/sok.cgi?sokekategori=global&treff=ja&soketekst="+text);
  }
  else {
    var pageTrackerSearch = _gat._getTracker("UA-683183-1");
    pageTrackerSearch._trackPageview("/sok/ikketreff/sok.cgi?sokekategori=global&treff=nei&soketekst="+text);
  }

  var div = $H();
  var title = $H();
  var content = $H();
  var footer = $H();
  var table = $H();
  var count = $H();
  var mykeys = settings.get('ptypes').keys();
  // Initiate search divs and tables
  for (var idx = 0; idx < mykeys.length; idx++) {
	div.set(mykeys[idx], $(mykeys[idx] + '_search'));
	title.set(mykeys[idx], $(mykeys[idx] + '_search_title'));
	content.set(mykeys[idx], $(mykeys[idx] + '_search_content'));

	content.get(mykeys[idx]).innerHTML = '';
  	table.set(mykeys[idx], document.createElement('table'));
	table.get(mykeys[idx]).id = mykeys[idx] + '_search_table';
	content.get(mykeys[idx]).appendChild(table.get(mykeys[idx]));
	
	footer.set(mykeys[idx], $(mykeys[idx] + '_search_footer'));
	footer.get(mykeys[idx]).innerHTML = '&nbsp;';
	count.set(mykeys[idx], 0);
  }
  // Do data runthrough and add items to the corresponding table
  var totalHits = 0;
  var tr;
  for ( var i=0; i < data.listing.length; i++ ) {
    var row = data.listing[i];
    if (table.get(row.PTYPE.toLowerCase()) != undefined) {		
      if (count.get(row.PTYPE.toLowerCase()) < MAX_CATG_HITS_GLOBAL || MAX_CATG_HITS_GLOBAL == 0) {
        tr = table.get(row.PTYPE.toLowerCase()).insertRow(-1);
        var a = document.createElement( 'a' );
        a.innerHTML = row.TITLE;
        a.href = (row.PRODUCT_ID) ? (isSEF ? '/product-result/'+(row.SEFURL ? row.SEFURL+'/':'')
                                           : URL_BASE + 'func=catalog.show&table=PRODUCT&categorynu=&func_id=' + row.PRODUCT_ID + '&globsearch=' + escape(text) + getSearchCriterias(true) )
                                  : (isSEF ? '/search-content/'+(row.PUBSEFURL ? row.PUBSEFURL+'/':'')+(row.CONSEFURL ? row.CONSEFURL+'/':'') 
                                           : URL_BASE + 'func=frontend.show&table=CONTENT&template=content&func_id=' + row.CONTENT_ID + '&publish_id=' + row.PUBLISH_ID);

        var productNameCell = tr.insertCell(-1);
        productNameCell.className = 'search_category';
        productNameCell.appendChild( a );
      }
      count.set(row.PTYPE.toLowerCase(), count.get(row.PTYPE.toLowerCase()) + 1);
      totalHits++;
    }
  }
  // Loop afterwards to add elements depending on the result of the data runthrough
  for (var idx = 0; idx < mykeys.length; idx++) {
  	title.get(mykeys[idx]).innerHTML = settings.get('ptypes').get(mykeys[idx]) + ' (' + count.get(mykeys[idx]) + ' ' + s_no_hits + ')' ;	
	if (mykeys[idx].toLowerCase() != 'innhold' && count.get(mykeys[idx]) > 0) {
		var footercontent = document.createElement('a');

                footercontent.href = (isSEF ? '/catalog-result/?selected=' : URL_BASE + 'func=frontend.show&template=search_product_category&open=reset&shopid=default&page=0&menuitem=&selected=') 
                                          + '&ptype=' + mykeys[idx] + '&input=' + escape(text);

		footercontent.innerHTML = s_goto_ptype_search;
		footercontent.className = 'show_all';
		footer.get(mykeys[idx]).appendChild(footercontent);
	} else {
		footer.get(mykeys[idx]).innerHTML = '&nbsp;';
	}
  }
  // Create status text
  var prodhits = totalHits - count.get('innhold');
  var prodtxt = (prodhits == 1) ? prodhits + ' ' + s_products_match_single : prodhits + ' ' + s_products_match;
  var arttxt = (count.get('innhold') == 1) ?  count.get('innhold') + ' ' + s_articles_match_single : count.get('innhold') + ' ' + s_articles_match;
  statusMonitor.innerHTML = s_search_pre_text + ' <em>'+ text +'</em>: ' + prodtxt + ' ' + arttxt;
}

function do_switch (settings, which_id) {
  var is_tabswitch = (IsTab(settings.get('show_id')) && IsTab(settings.get('hide_id'))) ? 1 : 0;
  var is_switch = (!is_tabswitch && settings.get('show_id') != '' && settings.get('hide_id') != ''
  					&& settings.get('show_id') != undefined && settings.get('hide_id') != undefined) ? 1 : 0;
  
  if (is_tabswitch) {
  	activate_tab_getobj(which_id);
  } else if (is_switch) {
    var hide = (which_id == settings.get('hide_id')) ? $( settings.get('hide_id') ) : $( settings.get('show_id') );
    var show = (which_id == settings.get('show_id')) ? $( settings.get('hide_id') ) : $( settings.get('show_id') );
    if (hide && hide.style.display != 'none') {hide.style.display = 'none';}
    if (show && show.style.display != 'block') {show.style.display = 'block';}
  }
}

function do_switch_pane (show_id, hide_id) {
  var is_tabswitch = (IsTab(show_id) && IsTab(hide_id)) ? 1 : 0;
  var is_switch = (!is_tabswitch && show_id != '' && hide_id != ''
  					&& show_id != undefined && hide_id != undefined) ? 1 : 0;
  
  if (is_tabswitch) {
  	activate_tab_getobj(show_id);
  } else if (is_switch) {
    var hide = $( hide_id );
    var show = $( show_id );
    if (hide && hide.style.display != 'none') {hide.style.display = 'none';}
    if (show && show.style.display != 'block') {show.style.display = 'block';}
  }
}

function closeSearch (search_id, bDelInput, settings) {
  var searchinput = $(search_id);
  if (searchinput) {
  	if (settings == undefined || !settings) { settings = getSearchSettings(search_id); }    
  	if (bDelInput) { searchinput.value = ''; }
	
	if (search_id == 'search') {
	    var mykeys = settings.get('ptypes').keys();
	    // Initiate search divs and tables
	    for (var idx = 0; idx < mykeys.length; idx++) {
		  $(mykeys[idx] + '_search_content').innerHTML = '';
		  $(mykeys[idx] + '_search_title').innerHTML = '&nbsp;';
		  $(mykeys[idx] + '_search_footer').innerHTML = '&nbsp;';
	    }
	} else {
		$(settings.get('container')).innerHTML = '';
	}
    $(settings.get('statusMonitor')).innerHTML = '';
    searchinput.className = searchinput.className.replace(/warning$/, "");
    do_switch(settings, settings.get('hide_id'));
  }
}

function getSearchCriterias (bFlags) {
  var retstr = '';
  var counter = 0;
  var search_criteria = document.getElementsByName( 'search_criteria' );
  for (counter = 0; counter < search_criteria.length; counter++) {

    if (search_criteria[counter].checked) {
      if (!bFlags) {
	  	retstr += '&sc=' + escape(search_criteria[counter].value);
	  }else {
	    retstr += '&' + escape(search_criteria[counter].value) + '=1';
	  }
    }
  }
  return retstr;
}

function getControls(show_id, hide_id) {

  var close = document.createElement( 'a' );
  close.className = 'control';
  close.innerHTML = s_clear_search_results + '.';

  Event.observe( close, 'click', function() {
      var el = document.getElementById( "search_string" );
      el.value='';
      var search_criteria = document.getElementsByName( 'search_criteria' );
      for (counter = 0; counter < search_criteria.length; counter++) {
        search_criteria[counter].checked = false;
      }
      clearControls('search_input');
      clearControls('search_top');
      clearControls('search_bottom');
      dynamicSearch();
      if ( hide_id != undefined && hide_id != '') {
        var hide = $( hide_id );
        if (hide) {hide.style.display = 'block';}
      }
      if ( show_id != undefined && show_id != '') {
        var show = $( show_id );
        if (show) {show.style.display = 'none';}
      }
    }
  );

  return close;
}

function setControls(containername, show_id, hide_id) {
  var container = $(containername);
  if (!container) return;
  var cloned_container = container.cloneNode(true);
  var controls = getElementsByClassNode('search_control', cloned_container, 'span');
  for ( var i=0; i < controls.length; i++ ) {
    if (controls[i].innerHTML == '') {
      controls[i].appendChild( getControls(show_id, hide_id) );
    }
  }
  container.parentNode.replaceChild(cloned_container,container);
}

function clearControls(containername) {
  var container = $(containername);
  if (!container) return;
  var cloned_container = container.cloneNode(true);
  var controls = getElementsByClassNode('search_control', cloned_container, 'span');
  for ( var i=0; i < controls.length; i++ ) {
    if (controls[i].innerHTML != '') {
      controls[i].innerHTML = '';
    }
  }
  container.parentNode.replaceChild(cloned_container,container);
}

function clear ( element ) {
  // Remove all children of an element
  while ( element.firstChild != undefined ) {
    var e = element.removeChild( element.firstChild );
    clear( e );
  }
}

function db( message ) {

  var d = document.getElementById('debug');
  d.innerHTML += message + '<br>';
}

function getElementsByClass( searchClass, nodename, tagName) {
  var domNode = $(nodename);
  if (domNode == null) domNode = document;
  if (tagName == null) tagName = '*';
  var el = new Array();
  var tags = domNode.getElementsByTagName(tagName);
  var tcl = " "+searchClass+" ";
  for(i=0,j=0; i<tags.length; i++) {
    var test = " " + tags[i].className + " ";
    if (test.indexOf(tcl) != -1)
      el[j++] = tags[i];
  }
  return el;
}

function getElementsByClassNode( searchClass, domNode, tagName) {
  if (domNode == null) domNode = document;
  if (tagName == null) tagName = '*';
  var el = new Array();
  var tags = domNode.getElementsByTagName(tagName);
  var tcl = " "+searchClass+" ";
  for(i=0,j=0; i<tags.length; i++) {
    var test = " " + tags[i].className + " ";
    if (test.indexOf(tcl) != -1)
      el[j++] = tags[i];
  }
  return el;
}

function doCheckboxesValidation(triggerbox) {
  if ($(triggerbox)) {
    if (triggerbox == 'cb_nosub' && $(triggerbox).checked) {
      $('cb_telenor').checked = false;
      $('cb_netcom').checked = false;
    } else {
      $('cb_nosub').checked = false;
    }
  }
}
