/* application.js
 *
 * Copyright 2007-2008 Vandesco bvba (www.allejobsinleuven.be)
 * All rights reserved
 * Author: Koen Van der Auwera <koen@10to1.be>
 * Author: Peter Vandenabeele <peter@vandenabeele.com>
 * Author: Bert Klaps <bert.klaps@gmail.com>
 *
 * Application specific javascript code
 * file created: 2008-01-18  (approximately)
 * last update: $Date: 2008-07-25 13:27:31 +0200 (Fri, 25 Jul 2008) $
 */

Event.addBehavior.reassignAfterAjax = true;
Event.addBehavior({
  'div.ajax_pagination a' : Remote.Link
})

function getSearchParams(elements) {
	var str = ""
	for (var i=0; i<elements.length; i++) {
		var elem = $(elements[i]);
		str += elem.name + "=" + encodeURIComponent(elem.getValue()) + "&";
	}
        str += "page=1&"; // This is a new query: force page to 1
        var name = decodeURIComponent(window.location) ;
	return str;
}

// Delayed observer, like Form.Element.Observer, 
// but waits for delay after last key input
// Ideal for live-search fields
Form.Element.OurDelayedObserver = Class.create();
Form.Element.OurDelayedObserver.prototype = {
  initialize: function(element, delay, minChars, seperator, checkOn, callback) {
    this.delay     = delay || 0.5;
    this.minChars  = minChars || 1;
    this.seperator = seperator || ' ';
    this.element   = $(element);
    this.callback  = callback;
    this.timer     = null;
    this.lastValue = $F(this.element);
    Event.observe(this.element, checkOn, this.delayedListener.bindAsEventListener(this));
  },
  delayedListener: function(event) {
    if(!this.isFireable()) return;
    if(this.timer) clearTimeout(this.timer);
    this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
    this.lastValue = $F(this.element);
  },
  onTimerEvent: function() {
    this.timer = null;
    this.callback(this.element, $F(this.element));
  },
  isFireable: function() {
	var rvalue = $F(this.element);
	if(this.lastValue == rvalue) return false;
/*
        var tokens = rvalue.split(this.seperator);
        for(var i=0;i<tokens.length;i++) {
            if(tokens[i].length < this.minChars)
                return false;
        }
*/
	return true;
  }
};

var AJAXsearchResult ;

function update_ajaxWrapper () {
  $('ajaxWrapper').update(AJAXsearchResult);
}

function handleSearch (request) {
  AJAXsearchResult =  request.responseText;
  update_ajaxWrapper();
  set_changed();
}

function set_changed () {
  document.cookie = "changed=1; path=/";
}

function unset_changed () {
  document.cookie = "changed=0; path=/";
}

// Check the changed cookie in the browser
function changed_set () {
  return (document.cookie.indexOf("changed=1") != -1);
}

function fill_zip(element, value) {
	value.descendants().each(function(item) {
		cnames = $w(item.className);
		if (cnames[0] == 'city') {
			$('address_city').value = item.innerHTML;			
		} else if (cnames[0] == 'id') {
			$('address_zip_id').value = cnames[1];
		}
	});
}

address_fields = $w('zipcode zone city street_name_1 street_number_1 bus_number_1 street_2 post_box_address_1 post_box_address_2');

function address_info_enabler() {
	svalue = find_checked_element($$('input[name="address_info"]')).value;
	if (svalue == 1) {
		$('address_box').show();
		$('region_box').hide();			
		get_employer_site_address();
	} else if (svalue == 2) {
		enable_address();		
	} else if (svalue == 3) {
		$('address_box').hide();
		$('region_box').show();
	} else {
		$('address_box').hide();
		$('region_box').hide();		
	}
}

function find_checked_element(elements) {
	for(var i=0; i<elements.length; i++) {
		if (elements[i].checked) {
			return elements[i];
		}
	}
}

function disable_address() {
	address_fields.each(function(item) {
		Field.disable('address_' + item);
	});
}

function enable_address() {
	if ($('address_box').empty) {
		render_address_fields();
	}
	address_fields.each(function(item) {
		Field.clear('address_' + item);
		Field.enable('address_' + item);
	});
	$('address_box').show();
	$('region_box').hide();
}

function get_employer_site_address() {
	new Ajax.Request('/addresses/find/' + $F('job_employer_site_id'), {asynchronous:true, evalScripts:true});
}

function render_address_fields() {
	new Ajax.Request('/addresses/find', {asynchronous:true, evalScripts:true});
}

function toggle_personal_account_fields() {
	if ($('account_personal_account_requested').checked) {
		$('personal_fields').show();
		$('account_temp_email').addClassName('mandatory');
	} else {
		$('personal_fields').hide();
		$('account_temp_email').removeClassName('mandatory');
	}
}

function toggle_employer_site_description_field() {
	if ( $('employer_site_sponsored').checked) {
        	$('employer_site_description').enable();
		$('employer_site_description').style.backgroundColor = "white" ;
        } else {
        	$('employer_site_description').disable();
		$('employer_site_description').style.backgroundColor = "#efebe7" ;
        }
}

function toggle_job_description_field() {
	if ( $('job_sponsored').checked) {
		$('job_description').enable();
		$('job_description').style.backgroundColor = "white" ;
        } else {
		$('job_description').disable();
		$('job_description').style.backgroundColor = "#efebe7" ;
        }
}

// Forces a new search, e.g. to be used on reload
function ajiv_search() {
       new Ajax.Updater('ajaxWrapper', '/jobs/ajax_search', {asynchronous:true, evalScripts:true, parameters: ""});
}

// Overlib functions for pop-ups windows
function show_short_description(text){
  overlib(text, BORDER, 1, TEXTSIZE, 2, WIDTH, 600, SNAPX, 50);
}
