var inputDelay = 300; // ei viivettä
var lastQUrl = "";
var xmlhttp;
var qResult;
var curSort = {};
curSort.field = "job.publication.start";
//curSort.field = "score";
curSort.fieldMap = {};
curSort.fieldMap["job.name"] = "job.name.sort";
curSort.fieldMap["company.name"] = "company.name.sort";
curSort.desc = {};
curSort.desc["job.publication.start"] = true;
curSort.desc["score"] = true;
var resultWindowStart = 0;
var resultWindowRows = 20;
var noResultRow = '<tr><td colspan="6" align="center"><i>Ei tuloksia</i></td></tr>';
var enterQueryResultRow = '<tr><td colspan="6" align="center"><i>Syötä hakuehdot</i></td></tr>';

function trim(stringToTrim) {
  return stringToTrim.replace(/^\s+|\s+$/g,"");
}

MyClass = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}

MyThrottlerEntry = MyClass.create();
MyThrottlerEntry.prototype = {
  initialize: function(func) {
    this.func = func;
    this.timestamp = new Date().getTime();
    this.timeoutVar = undefined;
  },
  getTimestamp: function() {
    return this.timestamp;
  },
  getFunc: function() {
    return this.func;
  },
  setFunc: function(func) {
    this.func = func;
  },
  getTimeoutVar: function() {
    return this.timeoutVar;
  },
  setTimeoutVar: function(timeoutVar) {
    this.timeoutVar = timeoutVar;
  }
};

MyDelayedThrottler = MyClass.create();
MyDelayedThrottler.prototype = {
  initialize: function() {
    this.entries = new Array();
  },
  throttle: function(id, millis, func) {
    var entry = this.entries[id];
    var me = this;
    if (entry == undefined) {
      entry = new MyThrottlerEntry(func);
      this.entries[id] = entry;
      entry.timerHandle = window.setTimeout(function() {
        me.execute(id);
      }, millis);
    } else {
      window.clearTimeout(entry.timerHandle);
      entry.setFunc(func);
      entry.timerHandle = window.setTimeout(function() {
        me.execute(id);
      }, millis);
    }
  },
  execute: function(id) {
    var entry = this.entries[id];
    if (entry != undefined) {
      var func = entry.getFunc();
      var tmp = func();
    }
    this.entries[id] = undefined;
  }
};
delayedThrottler = new MyDelayedThrottler();

/*
  tätä kutsutaan kun painellaan tablen yläreunassa olevia nappuloita. 
  @column on sarake jonka mukaan järjestetään
  @id on sitten sen th:n id joka pitää asettaa valituksi
  
  @tuo curSort on ilmeisesti se default jonka mukaan nämä sitten on järjestetty
  
  HUOM funktio EI TEE ITSE JÄRJESTYSTÄ VAAN SE TEHDÄÄÄN TUOSSA submitQuery3
*/
function toggleSort(column, id) {
  if (column != curSort.field) { // jos eri
    $('span.arrowsort').html('');
    curSort.field = column;
  } else { // jos sama niin vaihda suunta
    curSort.desc[column] = (curSort.desc[column]) ? false : true;
  }

  var buf = "";
  if (curSort.desc[curSort.field]) {
    buf = '&nbsp;<img src="/sites/all/themes/tyopaikat_oikotie_fi/img/icon_sortdown.gif" />';
  } else {
    buf = '&nbsp;<img src="/sites/all/themes/tyopaikat_oikotie_fi/img/icon_sortup.gif" />';
  }

  var resp = curSort.field + "+";
  resp += curSort.desc[curSort.field] ? "desc" : "asc";
  $('#sort').attr('value',resp);
  formToHash(); 
/*  $('#sort').val(resp);
  if ( $('#sort2') ) {
    $('#sort2').val(resp);
  }*/
  $('#qresult th').removeClass('selected');
  $('#'+id).addClass('selected');

  document.getElementById(curSort.field + '.sort').innerHTML = buf;
}

/*
  kuvaus tähän
*/
function sort2query() {
  var sortField = curSort.fieldMap[curSort.field];
  if (sortField == undefined) sortField = curSort.field;
  var resp = sortField + "+";
  resp += curSort.desc[curSort.field] ? "desc" : "asc";

  $('#sort').val(resp);
  if ( $('#sort2') ) {
    $('#sort2').val(resp);
  }

  resp = "&sort=" + resp;

//  return resp;
}

/*
  kuvaus tähän
*/
function writeColumnHeading(column, label) {
  var buf = '<nobr>';
  buf += '<a href="#" onclick="toggleSort(\'' + column + '\'); submitFormQuery3(); return false;">' + label;
  buf += '<span id="' + column + '.sort">';
  if (column == curSort.field) {
    var columnName = curSort.field;
    //alert(columnName);
    //var columnName = document.getElementById(column);
    //columnName.setAttribute('class', 'sorted');
    if (curSort.desc[curSort.field]) {
      buf += '&nbsp;<img src="/sites/all/themes/tyopaikat_oikotie_fi/img/icon_sortdown.gif" />';
    } else {
      buf += '&nbsp;<img src="/sites/all/themes/tyopaikat_oikotie_fi/img/icon_sortup.gif" />';
    }
  }
  buf += '</span>';
  buf += '</nobr></a>';
  document.write(buf);
}


/*
  tästä sitten mennään ilmoitusvahteihin
*/
function searchAdwatchSubmit() {
  document.forms.qform.action = '/ilmoitusvahti/uusi';
  document.forms.qform.onsubmit = '';
  document.forms.qform.submit();
}

/*
  tästä sitten mennään RSS hakuihin
*/
function dumpSearchIntoRSS() {
  document.forms.qform.action = 'mk/rss';
  document.forms.qform.onsubmit = '';
  document.forms.qform.submit();
}

