// Careesma offers
// Ver. 1.8
//
//   Ver. 1.1 - Correct Bug in IE7
//   Ver. 1.2 - Added URL decode to keywords (allowed more than one keyword)
//   Ver. 1.3 - Corrects BUG on Careesma that makes double url encoding when language it's no english
//   Ver. 1.4 - Encoding problem and solve that inactivates filters
//   Ver. 1.5 - Major refactoring and IE Compatibility issues
//   Ver. 1.6 - Solves Bug in IE6 onLoading
//   Ver. 1.7 - Solves Bug in IE6 onLoading & put target="_blank"
//   Ver. 1.8 - Add "NO RESULT" message
//
// (c) Careesma 2008
// ======================================

// function urldecode
function urldecode(utftext) {
  var string = "";
  var i = 0;
  var c = c1 = c2 = 0;
  
  utftext = unescape(utftext);
  
  while ( i < utftext.length ) {
    c = utftext.charCodeAt(i);  
    if (c < 128) {
      string += String.fromCharCode(c);
      i++;
    } else if((c > 191) && (c < 224)) {
      c2 = utftext.charCodeAt(i+1);
      string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
      i += 2;
    } else {
      c2 = utftext.charCodeAt(i+1);
      c3 = utftext.charCodeAt(i+2);
      string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
      i += 3;
    }
  }
  return string;
}

// function urlencode
function urlencode(string) {
  string = string.replace(/\r\n/g,"\n");
  var utftext = "";
  
  for (var n = 0; n < string.length; n++) {
    var c = string.charCodeAt(n);
    if (c < 128) {
      switch(c){
        case 47: utftext += "%2F"; break;
        default: utftext += String.fromCharCode(c); break;
      }
    } else if((c > 127) && (c < 2048)) {
      utftext += String.fromCharCode((c >> 6) | 192);
      utftext += String.fromCharCode((c & 63) | 128);
    } else {
      utftext += String.fromCharCode((c >> 12) | 224);
      utftext += String.fromCharCode(((c >> 6) & 63) | 128);
      utftext += String.fromCharCode((c & 63) | 128);
    }
  }
  return escape(utftext);
}

// function getURLVar
function getURLVar(urlVarName) {
  var urlHalves = String(document.location).split('?');
  var urlVarValue = undefined;
  if(urlHalves[1]){
    var urlVars = urlHalves[1].split('&');
    for(i=0; i<=(urlVars.length); i++){
      if(urlVars[i]){
        var urlVarPair = urlVars[i].split('=');
        if (urlVarPair[0] && urlVarPair[0] == urlVarName) {
          urlVarValue = urlVarPair[1];
        }
        if (urlVarPair[0] && urlVarPair[0] == urlVarName+'[]') {
          if(urlVarValue==undefined) {
            urlVarValue = Array();
          }
          urlVarValue.push(urlVarPair[1]);
        }
      }
    }
  }
  return urlVarValue;   
}

var Page=1;
if(Lang=="en") var url=Domain + "/" + Lang + "/jobseeker/export_postings.php";
else var url=Domain + "/jobseeker/export_postings.php";


try {
  var test = SearchBox;
} catch(e) {SearchBox=false;}
if(getURLVar('SearchBox')) SearchBox = getURLVar('SearchBox').toUpperCase()==='FALSE';

try {
  var test = mainLanguage;
} catch(e) { mainLanguage=( Lang!="en" ); }

try {
  var test = Keyword;
} catch(e) {Keyword="";}
if(getURLVar('Keyword')) {
  Keyword = urldecode(getURLVar('Keyword'));
}

try {
  var test = ProfileId;
} catch(e) {ProfileId=false;}
if(getURLVar('ProfileId')) ProfileId = getURLVar('ProfileId');

try {
  var test = CategoryId;
} catch(e) {CategoryId=false;}
if(getURLVar('CategoryId')) CategoryId = getURLVar('CategoryId');

try {
  var test = CategoryActiveFilter;
} catch(e) {CategoryActiveFilter=false;}
if(getURLVar('CategoryActiveFilter')) {
  CategoryActiveFilter = getURLVar('CategoryActiveFilter').toUpperCase()==='TRUE';
}
  
try {
  var test = CategoryWorld;
} catch(e) {CategoryWorld=Array();}
if(getURLVar('CategoryWorld')) {
  CategoryWorld = getURLVar('CategoryWorld');
}
  
try {
  var test = CategoryMultiselect;
} catch(e) {CategoryMultiselect=false;}
if(getURLVar('CategoryMultiselect')) {
  CategoryMultiselect = getURLVar('CategoryMultiselect').toUpperCase()==='TRUE';
}

try {
  var test = SubRegionId;
} catch(e) {SubRegionId=false;}
if(getURLVar('SubRegionId')) {
  SubRegionId = getURLVar('SubRegionId');
}

try {
  var test = SubRegionActiveFilter;
} catch(e) {SubRegionActiveFilter=false;}
if(getURLVar('SubRegionActiveFilter')) {
  SubRegionActiveFilter = getURLVar('SubRegionActiveFilter').toUpperCase()==='TRUE';
}

try {
  var test = SubRegionWorld;
} catch(e) {SubRegionWorld=Array();}
if(getURLVar('SubRegionWorld')) {
  SubRegionWorld = getURLVar('SubRegionWorld');
}
  
try {
  var test = SubRegionMultiselect;
} catch(e) {SubRegionMultiselect=false;}
if(getURLVar('SubRegionMultiselect')) {
  SubRegionMultiselect = getURLVar('SubRegionMultiselect').toUpperCase()==='TRUE';
}

try {
  var test = ResultsPerPage;
} catch(e) {ResultsPerPage=20;}
if(getURLVar('ResultsPerPage')) {
  ResultsPerPage = getURLVar('ResultsPerPage');
}

// < document ready functions >
window.onDomReady = DomReady;
window.onLoad = DomReady;

function DomReady(fn)
{
  if(document.addEventListener)
    document.addEventListener("DOMContentLoaded", fn, false);
  else
    document.onreadystatechange = function(){readyState(fn)}
}

function readyState(fn)
{
  if(document.readyState == "interactive") fn();
}

window.onDomReady(onReady);

function addLoadEvent(func)
{
  var oldonload = window.onload;
  if(typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

addLoadEvent(onReady);

readyex=false;

function onReady()
{
  if(!readyex){
    processAjax(1);
    readyex=true;
  }
}

// < /document ready functions >

// < URL Construction >
function constructSubRegionsURL() { return(Domain+"/jobseeker/export_subregions.php?lang="+Lang+"&country="+Country); }
function constructCategoriesURL() { return(Domain+"/jobseeker/export_categories.php?lang="+Lang); }
function constructURL(url,ProfileId_,CategoryId_,ResultsPerPage,SubRegionId_,Page,Keyword)
{
  var ProfileIdStr = ''; var SubRegionIdStr = ''; var CategoryIdStr = '';
  
  if(ProfileId_!=false) ProfileIdStr = "&ProfileId="+ProfileId_;
  if(CategoryId_!=false) 
  {
    if( CategoryId_ instanceof Array ) { for( Category in CategoryId_ ) { if(CategoryId_!='-1') CategoryIdStr = CategoryIdStr + "&CategoryId[]="+CategoryId_[Category]; } }
    else { if(CategoryId_!='-1') CategoryIdStr = "&CategoryId="+CategoryId_; }
  } else if(CategoryId!=false) {
    if( CategoryId instanceof Array ) { for( Category in CategoryId ) { if(CategoryId!='-1') CategoryIdStr = CategoryIdStr + "&CategoryId[]="+CategoryId[Category]; } }
    else { if(CategoryId!='-1') CategoryIdStr = "&CategoryId="+CategoryId; }
  }
  if(SubRegionId_!=false) 
  {
    if( SubRegionId_ instanceof Array ) { for( SubRegion in SubRegionId_ ) { if(SubRegionId_!='-1') SubRegionIdStr = SubRegionIdStr + "&SubRegionId[]="+SubRegionId_[SubRegion]; } }
    else { if(SubRegionId_!='-1') SubRegionIdStr = "&SubRegionId="+SubRegionId_; }
  } else if(SubRegionId!=false) {
    if( SubRegionId instanceof Array ) { for( SubRegion in SubRegionId ) { if(SubRegionId!='-1') SubRegionIdStr = SubRegionIdStr + "&SubRegionId[]="+SubRegionId[SubRegion]; } }
    else { if(SubRegionId!='-1') SubRegionIdStr = "&SubRegionId="+SubRegionId; }
  }
  
  return url+"?srch=1&Keyword="+urlencode(Keyword)+ProfileIdStr+CategoryIdStr+SubRegionIdStr+"&ResultsPerPage="+ResultsPerPage+"&Page="+Page+"&random="+Math.ceil(Math.random()*100000000);
}
// < /URL Construction >

function getById(name) { return document.getElementById(name); }
function createElement(tagname) { return document.createElement(tagname); }
function createDIV(id){ element = createElement('div'); element.id=id; return element; }
function createINPUTTEXT(id,name,maxlength,value,size){ element = createElement('input'); element.id=id; element.name=name; element.maxlength=maxlength; element.value=value; element.size=size; element.type='text'; return element; }
function createUL(classname){ element = createElement('ul'); element.className=classname; return element; }
function createLI(classname, id, HTML){ element = createElement('li'); element.className=classname; element.id=id; element.innerHTML=HTML; return element; }
function createLABEL(HTML){ element = createElement('label'); element.innerHTML=HTML; return element; }
function createSELECT(id,name,multiple){ element = createElement('select'); element.id=id; element.name=name; if(multiple===true) element.multiple=true; return element; }
function createSCRIPT(src){ element = createElement('script'); element.src=src; return element; }
function createBUTTON(text,onclick){ element = createElement('input'); element.type='button'; element.value=text; element.onclick=onclick; return element; }
function createOPTION(value,html,selected){ element = createElement('option'); element.value=value; element.innerHTML=html; if(selected===true) element.selected='selected'; return element; }
function translate(lang, english, polish, deutch){ switch(lang) { case "pl": return(polish); break; case "de": return(deutch); break; default: return(english); break; } }

function processAjax(pg)
{
  Page = pg;

  if(SearchBox) {

    joboffers_searchbox = createDIV('joboffers_searchbox');
    
    keyword_box = createDIV('keyword_box');
    keyword_box.appendChild( createLABEL(translate(Lang,'What?','Jakiej pracy szukasz?','Was?')) );
    keyword_box.appendChild( createINPUTTEXT('Keyword','Keyword',100,Keyword,26) );
    keyword_box_ul = createUL('error-items');
    keyword_box_li = createLI('fm-error','Error_KeywordsLength','Keywords must be at least 3 characters long.');
    keyword_box_ul.appendChild( keyword_box_li );
    keyword_box.appendChild( keyword_box_ul );
    joboffers_searchbox.appendChild(keyword_box);
    
    if(SubRegionActiveFilter){
      subregion_box = createDIV('subregion_box');
      subregion_box.appendChild( createLABEL(translate(Lang,'Where?','Gdzie?','Wo?')) );
      subregion_box_select = createSELECT('SubRegion_select','SubRegion',SubRegionMultiselect);
      subregion_box_select_script = createSCRIPT( constructSubRegionsURL() );
      subregion_box_select.appendChild( subregion_box_select_script );
      subregion_box.appendChild( subregion_box_select );
      joboffers_searchbox.appendChild(subregion_box);
    }
    
    if(CategoryActiveFilter){
      category_box = createDIV('category_box');
      category_box.appendChild( createLABEL(translate(Lang,'Category','Branża','Berufskategorien')) );
      category_box_select = createSELECT('Category_select','Category',CategoryMultiselect);
      category_box_select_script = createSCRIPT( constructCategoriesURL() );
      category_box_select.appendChild( category_box_select_script );
      category_box.appendChild( category_box_select );
      joboffers_searchbox.appendChild(category_box);
    }
    
    joboffers_searchbox_div = createDIV('button_box');
    joboffers_searchbox_button = createBUTTON( translate(Lang,'Find Jobs »','Szukaj ofert pracy »','Jobs Finden »'), function(){ processAjaxOnlyContent(1); } );
    joboffers_searchbox_div.appendChild( joboffers_searchbox_button );
    joboffers_searchbox.appendChild( joboffers_searchbox_div );
    joboffers_searchbox.appendChild( createDIV('clboth') );
    
    getById('joboffers').appendChild( joboffers_searchbox );
  }
  
  joboffers_content = createDIV('joboffers_content');
  joboffers_content_script = createSCRIPT( constructURL(url,ProfileId,CategoryId,ResultsPerPage,SubRegionId,Page,Keyword) );
  joboffers_content.appendChild( joboffers_content_script );
  getById('joboffers').appendChild( joboffers_content );
}

function processAjaxOnlyContent(pg)
{
  Page = pg;
  
  joboffers_content = getById('joboffers_content');
  for(id in joboffers_content.childNodes){
    try {
      joboffers_content.removeChild( joboffers_content.childNodes[0] );
    } catch(e) {}
  }
  
  if(getById('Keyword')!=null) Keyword = getById('Keyword').value;
  if(getById('Category_select')!=null) {
    CategoryId = Array();
    for(id=0; id<getById('Category_select').length; id++) {
      if(getById('Category_select').options[id].selected) 
        CategoryId.push( getById('Category_select').options[id].value );
    }
  }
  if(getById('SubRegion_select')!=null) {
    SubRegionId = Array();
    for(id=0; id<getById('SubRegion_select').length; id++)
      if(getById('SubRegion_select')[id].selected) 
        SubRegionId.push( getById('SubRegion_select')[id].value );
  }
  
  joboffers_content_script = createSCRIPT( constructURL(url,ProfileId,CategoryId,ResultsPerPage,SubRegionId,Page,Keyword) );
  joboffers_content.appendChild( joboffers_content_script );
}


function stripslashes(str) {
	try {
    str=str.replace(/\\'/g,'\'');
    str=str.replace(/\\"/g,'"');
    str=str.replace(/\\\\/g,'\\');
    str=str.replace(/\\0/g,'\0');
    return str;
  } catch(e) {return "";}
}

function tolink(str) {
  str=str.replace(/\\'/g,'\'');
  str=str.replace(/\'/g,'-');
  str=str.replace(/ /g,'-');
  str=str.replace(/\\"/g,'"');
  str=str.replace(/\\\\/g,'\\');
  str=str.replace(/\\0/g,'\0');
  return str;
}

function inArray(array,value) {
  exists = false;
  for(id in array) {
    if(array[id]==value) {
      exists = true;
      break;
    }
  }
  return(exists);
}

function onSubRegionsAjaxLoaded() {
  option_first = createOPTION(-1,translate(Lang,'[ Please select a province ]','[ Wybierz region ]','[ Wählen Sie ein Bundesland aus ]'),false);
  getById('SubRegion_select').appendChild( option_first );
  
  for(subregion in document.SubRegionsAjaxResults) {
    try{
      exists = false;
      if(SubRegionWorld.length==0) exists=true;
      for(srw in SubRegionWorld){
        if(SubRegionWorld[srw]==subregion){
          exists = true;
          break;
        }
      }
      if(exists){
        getById('SubRegion_select').appendChild( createOPTION(subregion, document.SubRegionsAjaxResults[subregion], inArray(getURLVar('SubRegionId'),subregion)) );
      }
    } catch(e){}
  }
}

function onCategoriesAjaxLoaded() {
  option_first = createOPTION(-1,translate(Lang,'[ Please select a category ]','[ Please select a category ]','[ Please select a category ]'),false);
  getById('Category_select').appendChild( option_first );
  
  for(category in document.CategoriesAjaxResults) {
    try{
      exists = false;
      if(CategoryWorld.length==0) exists=true;
      for(cat in CategoryWorld){
        if(CategoryWorld[cat]==category){
          exists = true;
          break;
        }
      }
      if(exists){
        getById('Category_select').appendChild( createOPTION(category, document.CategoriesAjaxResults[category], inArray(getURLVar('CategoryId'),category)) );
      }
    } catch(e){}
  }
}

function onAjaxLoaded()
{
  obj = document.AjaxResults;

  NumPages = Math.ceil(obj['numFound'] / ResultsPerPage);
  try{ ActualPage = Page; } catch(e) { ActualPage = 1; }
  
  html = '';
  
  i=0;
  html = html + '<div class="no_results"';
  if(obj['data'].length>0)
  {
    html = html + ' style="display:none;"';
  }
  html = html + '>' + translate(Lang,'Sorry, unfortunately we cannot find any job offers that suit your searched criteria.','Brak oferty pracy, które odpowiadają twoim kryteriom wyszukiwania.','Wir bedauern, aber wir konnten keine Jobangebote finden, die zu den von Ihnen angegebenen Suchkriterien passen.') + '</div>';
  while(i<obj['data'].length)
  {
    if(mainLanguage==true) {
        html = html + '<div class="position_element"><div class="position_title"><a target="_blank" href="'+Domain + translate(Lang,'/jobs/','/praca/','/jobs/');
    } else {
        html = html + '<div class="position_element"><div class="position_title"><a target="_blank" href="'+Domain + '/' + Lang + translate(Lang,'/jobs/','/praca/','/jobs/');
    }
    
    html = html + tolink(obj['sanitizedPostingNames'][i]) + '/' + 
                  tolink(obj['sanitizedPostingCities'][i]) + '/' + 
                  tolink(obj['data'][i]['id']) + '">' + 
                  stripslashes(obj['data'][i]['title']) + 
                  '</a></div>';
                  
    html = html + '<div class="position_candidates">';
    html = html + '</div><br class="clear_after_candidates" />';
    
    html = html + '<div class="position_municipality">' + stripslashes(obj['data'][i]['city']) + '</div>';
    html = html + '<div class="position_region">, ' + stripslashes(obj['subregions'][obj['data'][i]['job_subregion']]) + '</div>';
    
    html = html + '<div class="position_description">' + stripslashes(obj['data'][i]['responsibilities']) + '... ';
    if(mainLanguage==true) {
        html = html + '<a target="_blank" href="'+ 
                      Domain + 
                      translate(Lang,'/jobs/','/praca/','/jobs/') + 
                      tolink(obj['sanitizedPostingNames'][i]) + '/' + 
                      tolink(obj['sanitizedPostingCities'][i]) + '/' + 
                      tolink(obj['data'][i]['id']) + '">';
    } else {
        html = html + '<a target="_blank" href="'+ 
                      Domain + '/' + 
                      Lang + translate(Lang,'/jobs/','/praca/','/jobs/') + 
                      tolink(obj['sanitizedPostingNames'][i]) + '/' + 
                      tolink(obj['sanitizedPostingCities'][i]) + '/' + 
                      tolink(obj['data'][i]['id']) + '">';
    }
    html = html + translate(Lang,'more','wi&#281;cej','Mehr lesen &uuml;ber');
    html = html + '</a>';
    html = html + '</div>';
    
    html = html + '<div class="position_lastupdate"> ';
    
    html = html + '<div clarr="organization_name"> ';
    html = html + translate(Lang,'From: ','Od: ','Von: ');
    html = html + stripslashes(obj['data'][i]['company_name'])+'</div>';
    html = html + translate(Lang,'Last Update: ','Ostatnia aktualizacja: ','Letzte Aktualisierung: ');
    
    html = html + obj['data'][i]['last_update'].charAt(8) + obj['data'][i]['last_update'].charAt(9) + '/';
    html = html + obj['data'][i]['last_update'].charAt(5) + obj['data'][i]['last_update'].charAt(6) +'</div>';
    i++;
    html = html + '</div>';
  }
  html = html + '<div class="position_pagination">';
  
  if(ActualPage>1)
  {
    html = html + "<a href='javascript:processAjaxOnlyContent("+(ActualPage-1)+");'>";
    html = html + translate(Lang,'« Previous ','« Wstecz ','« Vorige ');
    html = html + "</a>";
  }
  
  i = 1;
  if(Page>6) i=Page-5;
  if((Page+5)<NumPages) NumPages = (Page+5);
  while(i<=NumPages)
  {
    if(i==ActualPage)
      html = html + i + " ";
    else
      html = html + " <a href='javascript:processAjaxOnlyContent("+i+");'>" + i + "</a> ";
    i++;
  }

  if(ActualPage<NumPages)
  {
    html = html + "<a href='javascript:processAjaxOnlyContent("+(ActualPage+1)+");'>";
    html = html + translate(Lang,' Next »',' Dalej »',' Nächste »');
    html = html + "</a>";
  }

  html = html + '</div>';
  
  document.getElementById('joboffers_content').innerHTML = html;

}
