﻿String.prototype.startsWith = function(str) { return (this.match("^" + str) == str) }
String.prototype.endsWith = function(str) { return (this.match(str + "$") == str) }

var jsonCache = [];

function isDefined(value)
{
	return typeof(value) == 'undefined' ? false : true;
}

var currentRequest = null;

function jobsLoad(url)
{
	if (url == '')
	{
		return;
	}
	//$('#jobs').empty();
	if (isDefined(jsonCache[url]))
	{
		jobsLoaded(jsonCache[url]);
		$('#cache').html('loaded from cache');
	}
	else
	{
		$('#cache').html('fetching new json');
		if (currentRequest != null) {
			currentRequest.abort();
			currentRequest = null;
		}
		currentRequest = $.ajax({
			url: '/temp/json.aspx',
			dataType: 'json',
			data: url,
			type: 'post',
			success: jobsLoaded
		});
	}
}

function jobsLoaded(data)
{
	currentRequest = null;
	jsonCache[data.url] = data;
	$('#count').html('Hittade ' + data.jobs.length + ' jobb');
	for (var i = 0; i < data.jobs.length; i++)
	{
		var job = $('<li/>');
		job.append('<h3>' + data.jobs[i].name + '</h3>');
		job.append('<div>' + data.jobs[i].date + '</div>');
		job.append('<div>' + data.jobs[i].description + '</div>');
		job.appendTo('#jobs');
	}
}

function jobsInit($)
{
	//$.history.init(jobsLoad);
	$('input').click(jobsInput);
}

function jobsInput(e)
{
	var form = $('#findjobs');
	var options = form.find('input');
	var url = '';
	for (var i = 0; i < options.size(); i++)
	{
		if (i > 0)
		{
			url += '&';
		}
		url += options.eq(i).attr('id');
		url += '=';
		url += options.eq(i).attr('checked');
	}
	//$.history.load(url);
	return true;
}

function getMilliSeconds() {
	return parseInt(Math.round(new Date().getTime()), 10);
}

var quickSearchDelayId = null;

function quickSearchInit($) {
	var elem = $('#toparea .search-field');
	if (elem.size() > 0) {
		elem.data('last', getMilliSeconds());
		elem.data('text', '');
		elem.eq(0).keyup(function() {
			var text = elem.val();
			if (text.length > 1) {
				var lastText = elem.data('text');
				if (text == lastText) {
					return;
				}
				var last = parseInt(elem.data('last'), 10);
				var now = getMilliSeconds();
				/*if (now - last < 100 && false) {
				return;
				}*/
				if (quickSearchDelayId != null) {
					clearTimeout(quickSearchDelayId);
				}
				quickSearchDelayId = setTimeout(function() {
					quickSearchFetch(text);
				}, 400);
				elem.data('last', now);
				elem.data('text', text);
			}
		});
	}
}

function quickSearchFetch(text) {
	var url = '/templates/ajax/quicksearch.aspx?epslanguage=' + $('#lang').text();
	$('body').css('cursor', 'progress');
	var data = {
		query: text
	};
	if (currentRequest != null) {
		currentRequest.abort();
		currentRequest = null;
	}
	currentRequest = $.ajax({
			url: url,
			dataType: 'json',
			type: 'post', 
			data: data, 
			success: quickSearchCallback, 
			error: function(XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown); } 
	});
}

function quickSearchCallback(data) {
	currentRequest = null;
	$('body').css('cursor', 'default');
	var jobs = $('#toparea .ajax-search .jobs');
	var jobCount = 0;
	if (jobs.size() > 0) {
		jobs.empty();
		for (var i = 0; i < data.jobs.length; i++) {
			var job = data.jobs[i];
			var jobElem = $('<li />');
			jobElem.css('background-image', 'url(' + job.companylogourl + ')');
			jobElem.append('<a href="' + job.detailurl + '">' + job.title + '</a>');
			//jobElem.append('<div>' + job.detailurl + '</div>');
			var desc = job.description + '';
			if (desc.length > 100) {
				desc = desc.substring(0, 100) + '...';
			}
			jobElem.append(desc);
			jobElem.appendTo(jobs);
			jobCount++;
		}
		if (data.jobs.length <= 0) {
			$('.jobs-heading').hide();
		}
		else {
			$('.jobs-heading').show();
		}
	}
	var results = $('#toparea .ajax-search .results');
	var resultCount = 0;
	if (results.size() > 0) {
		results.empty();
		for (var i = 0; i < data.search.length; i++) {
			var result = data.search[i];
			var resultElem = $('<li />');
			resultElem.append('<a href="' + result.detailurl + '">' + result.title + '</a>');
			resultElem.append($(result.breadcrumbs));
			resultElem.append($('<div style="clear:both;height:1px;overflow:hidden;margin:0;padding:0;" />'));
			resultElem.append(result.description);
			resultElem.appendTo(results);
			resultCount++;
		}
		if (data.search.length <= 0) {
			$('.misc-heading').hide();
		}
		else {
			$('.misc-heading').show();
		}
	}
	if (resultCount+jobCount <= 0) {
		$('#no-results').show();
	}
	else {
		$('#no-results').hide();
	}
	if (resultCount > 0) {
		$('#show-all-results').show();
		$('#show-all-results').attr('href', data.searchresults);
	}
	else {
		$('#show-all-results').hide();

	}

	var container = jobs.parent();
	if (!container.is(':visible')) {
		$('.ajax-search-bg').show();
		$('#greyout').fadeIn('fast');
		$('#greyout').click(quickSearchHide);
		container.slideDown('fast');
	}
}

function quickSearchHide() {
	$('#greyout').fadeOut('fast');
	$('.ajax-search').slideUp('fast', function() {
		$('.ajax-search-bg').hide();
	});
}

function jobSearchInit($) {
	if ($('#limit-search').length) {
		$.history.init(jobSearchFetch);
		var regions = $('#limit-search-options .region');
		if (regions.size() > 0) {
			regions.find('a').click(jobSearchFilterRegion);
		}
		var sectors = $('#limit-search-options .sector');
		if (sectors.size() > 0) {
			sectors.find('a').click(jobSearchFilterSector);
		}
		var types = $('#limit-search-options .type');
		if (types.size() > 0) {
			types.find('a').click(jobSearchFilterType);
		}
		var sorting = $('#limit-search-sort');
		if (sorting.size() > 0) {
			sorting.find('a').click(jobSearchSort);
		}
	}
}

function jobSearchFilterRegion() {
	var a = $(this);
	a.toggleClass('active');
	$.history.load(jobSearchParams());
	return false;
}

function jobSearchFilterSector() {
	var a = $(this);
	a.toggleClass('active');
	$.history.load(jobSearchParams());
	return false;
}

function jobSearchFilterType() {
	var a = $(this);
	a.toggleClass('active');
	$.history.load(jobSearchParams());
	return false;
}

function jobSearchSort() {
	var a = $(this);
	if (!a.hasClass('active')) {
		a.parent().siblings().children().removeClass('active');
		a.addClass('active');
		$.history.load(jobSearchParams());
	}
	return false;
}

function jobSearchUrl() {
	var url = '/templates/ajax/jobsearch.aspx?epslanguage=' + $('#lang').text();
	return url;
}

function jobSearchParams() {
	var regions = $('#limit-search-options .region .active');
	var region = '';
	regions.each(function() {
		var a = $(this);
		if (region != '') region += ',';
		region += a.attr('id').replace('region-', '');
	});
	var sectors = $('#limit-search-options .sector .active');
	var sector = '';
	sectors.each(function() {
		var a = $(this);
		if (sector != '') sector += ',';
		sector += a.attr('id').replace('sector-', '');
	});
	var types = $('#limit-search-options .type .active');
	var type = '';
	types.each(function() {
		var a = $(this);
		if (type != '') type += ',';
		type += a.attr('id').replace('type-', '');
	});
	var sort = $('#limit-search-sort .active').attr('id').replace('sort-', '');
	var params = 'region=' + region;
	params += '&sector=' + sector;
	params += '&type=' + type;
	params += '&sort=' + sort;
	return params;
}

var lastHash = '';

function jobSearchFetch(hash) {
	if (hash == null || hash == '') {
		$('#limit-search').find('.active').removeClass('active');
		$('#limit-search-sort a').eq(0).addClass('active');
		hash = jobSearchParams();
	} else if (lastHash == '') {
		$('#limit-search').removeClass('closed');
	}
	$('body').css('cursor', 'progress');
	lastHash = hash;
	var params = hash.split('&');
	if (params.length) {
		for (var i = 0; i < params.length; i++) {
			var eqpos = params[i].indexOf('=');
			var key = params[i].substring(0, eqpos);
			if (key == 'filterbox') continue;
			$('#limit-search .' + key).find('.active').removeClass('active');
			if (eqpos + 1 < params[i].length) {
				var value = params[i].substring(eqpos + 1, params[i].length);
				var commapos = value.indexOf(',');
				if (commapos > 0) {
					var values = value.split(',');
					for (var j = 0; j < values.length; j++) {
						$('#limit-search .' + key).find('#' + key + '-' + values[j]).addClass('active');
					}
				}
				else {
					$('#limit-search .' + key).find('#' + key + '-' + value).addClass('active');
				}
				//alert(key + '=' + value);
			}
		}
	}
	$.ajax({ 
		url: jobSearchUrl(),
		dataType: 'json',
		type: 'post', 
		data: hash,
		success: jobSearchCallback, 
		error: function(XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown); }
	});
	var elem = $('#rss-filtered');
	if (elem.length) {
		var url = elem.attr('href');
		var qmark = url.indexOf('?');
		if (qmark > 0) {
			url = url.substring(0, qmark);
		}
		//alert(url);
		elem.attr('href', url + '?' + jobSearchParams());
	}
}

var jobSearchHtml = '\
<div class="search-result">\
	<div class="job">\
		<a href="#" class="title" /><div class="info" /><span /><a href="#" class="search-button"></a>\
	</div>\
</div>';

function jobSearchItem(data, translate)
{
	var searchResult = $(jobSearchHtml);
	searchResult.find('.job').css('background-image', 'url(' + data.companylogourl + ')');
	var desc = data.description + '';
	searchResult.find('span').html(desc.length > 100 ? desc.substring(0, 100) : desc);
	searchResult.find('.info').html(data.category + ', ' + data.region + ', ' + data.lastupdate);
	searchResult.find('.title').attr('href', data.detailurl);
	searchResult.find('.title').html(data.title);
	searchResult.find('.search-button').attr('href', data.applyurl);
	searchResult.find('.search-button').html(translate.apply);
	return searchResult;
}

function jobSearchCallback(data) {
	$('body').css('cursor', 'default');
	$('#limit-search-header .total').text(data.jobs.length);

	var toCount = data.pagesize;

	if (data.jobs.length < data.pagesize)
	{
		toCount = data.jobs.length;
	}
	
	$('#limit-search-header .current').text('1-' + toCount);
	var div = $('#search-results');
	div.empty();
	if (data.jobs.length == 0) {
		$('#limit-search-header span').hide();
		$('#limit-search-header small').show();
	}
	else {
		$('#limit-search-header span').show();
		$('#limit-search-header small').hide();
	}
	for (var i = 0; i < data.jobs.length; i++) {
		var searchResult = jobSearchItem(data.jobs[i], data.translate);
		if (i >= data.pagesize)
		{
			searchResult.hide();
		}
		searchResult.appendTo(div);
	}
	var paging = div.siblings('.paging');
	paging.empty();
	if (data.jobs.length > data.pagesize)
	{
		paging.data('page', 1);
		var pages = parseInt(data.jobs.length / data.pagesize, 10);
		if (data.jobs.length % data.pagesize > 0) {
			pages++;
		}
		paging.data('last', pages);
		$('<li><span>1 ' + data.translate.of + ' ' + pages +'</span></li>').appendTo(paging);
		var next = $('<li class="next" />');
		var nextlink = $('<a href="javascript:void(0)" />');
		nextlink.append('<img src="/Templates/Images/paging_right_black.png" alt="" />');
		nextlink.click(function()
		{
			jobSearchChangePage(1, data);
		});
		nextlink.appendTo(next);
		next.appendTo(paging);
		var prev = $('<li class="prev" style="visibility:hidden" />');
		var prevlink = $('<a href="javascript:void(0)" />');
		prevlink.append('<img src="/Templates/Images/paging_left_black.png" alt="" />');
		prevlink.click(function()
		{	
			jobSearchChangePage(-1, data);
		});
		prevlink.prependTo(prev);
		prev.prependTo(paging);
	}
}

function jobSearchChangePage(change, data)
{
	var pageSize = parseInt(data.pagesize, 10);
	var resultContainer = $('#search-results');
	var paging = resultContainer.siblings('.paging');
	var page = parseInt(paging.data('page'), 10);
	var last = parseInt(paging.data('last'), 10);
	if ((page < last && change > 0) || (change < 0 && page > 1)) {
		resultContainer.css('height', resultContainer.height() + 'px');
		var results = resultContainer.children();
		results.hide();
		page += change;
		results.filter(function(index) {
			var min = (page - 1) * pageSize;
			var max = (page * pageSize);
			return index >= min && index < max;
		}).fadeIn();
		paging.data('page', page);

		if (results.size() > 0)
		{
			$('#limit-search-header .current').text(
				((page - 1) * pageSize + 1) + '-' + Math.min((page - 1) * pageSize + pageSize, results.size())
			);
			
		}
		else
		{
			$('#limit-search-header .current').text("0");
		}
		paging.find('span').html(page + ' ' + data.translate.of + ' ' + last);
		resultContainer.css('height', 'auto');
	}
	paging.find('li.prev').css('visibility', page == 1 ? 'hidden' : 'visible');
	paging.find('li.next').css('visibility', page == last ? 'hidden' : 'visible');
}

function employeeList() {
	var boxes = $('.amendo-staff-box-content');
	if (boxes.length) {
		var size = boxes.size();
		for (var i = 0; i < size; i+=2) {
			if (i + 1 < size) {
				var heightLeft = boxes.eq(i).height();
				var heightRight = boxes.eq(i + 1).height();
				boxes.eq(i).css('height', Math.max(heightLeft, heightRight) + 'px');
				boxes.eq(i + 1).css('height', Math.max(heightLeft, heightRight) + 'px');
			}
		}
	}
}

function shareOpen() {
	$('#greyout').fadeIn(200, function() {
		$('#lightbox').fadeIn(200);
	});
	$('#greyout').click(shareClose);
	return false;
}
function shareClose() {
	$('#lightbox').fadeOut(200, function() {
		$('#greyout').fadeOut(200);
	});
	return false;
}

function loginOpen()
{
	$('#greyout').fadeIn(200, function()
	{
		$('.header-login-open').fadeIn(200);
		$('.header-login-closed').hide();
	});
	$('#greyout').click(loginClose);
	return false;
}

function loginClose()
{
	$('.header-login-open').fadeOut(200, function()
	{
		$('#greyout').fadeOut(200);
		$('.header-login-closed').show();
	});
	return false;
}

function toggleFilter() {
	var filter = $('#limit-search-options');
	if (filter.length) {
		if (filter.is(':hidden')) {
			filter.slideDown();
		}
		else {
			filter.slideUp();
		}
		$('#limit-search-header').parent().toggleClass('closed');
	}
}

var logoCarouselId = null;

function logoCarouselInit() {
	var carousel = $('.logocarousel');
	if (carousel.length) {
		var size = carousel.find('.logos img').size();
		var index = 0;
		if (size <= 1) {
			return;
		}
		var userclick = true;
		logoCarouselId = setInterval(function() {
			userclick = false;
			carousel.find('.next').click();
		}, 5000);
		carousel.find('.prev').click(function() {
			if (logoCarouselId != null && userclick) {
				clearInterval(logoCarouselId);
				logoCarouselId = null;
			}
			userclick = true;
			if (--index < 0) {
				index = size - 1;
				carousel.find('.logos .inner a').animate({ left: '-' + (index * 200) + 'px' });
				carousel.find('.texts .inner a').animate({ left: '-' + (index * 170) + 'px' });
			}
			else {
				carousel.find('.logos .inner a').animate({ left: '+=200px' });
				carousel.find('.texts .inner a').animate({ left: '+=170px' });
			}
		});
		carousel.find('.next').click(function() {
			if (logoCarouselId != null && userclick) {
				clearInterval(logoCarouselId);
				logoCarouselId = null;
			}
			userclick = true;
			if (++index >= size) {
				index = 0;
				carousel.find('.logos .inner a').animate({ left: '0px' });
				carousel.find('.texts .inner a').animate({ left: '0px' });
			}
			else {
				carousel.find('.logos .inner a').animate({ left: '-=200px' });
				carousel.find('.texts .inner a').animate({ left: '-=170px' });
			}

		});
	}
}

$(document).ready(function($)
{
	$('#greyout').css('opacity', '0.4');
	jobsInit($);
	quickSearchInit($);
	jobSearchInit($);
	/*jQuery('a.image-view-btn').click(function()
	{
	jQuery(this).addClass('active');
	jQuery(this).siblings('a.image-view-btn, a.list-view-btn').removeClass('active');
	jQuery('div.amendo-staff-box-text-view').removeClass('amendo-staff-box-text-view').addClass('amendo-staff-box');
	employeeList();
	return false;
	});
	jQuery('a.list-view-btn').click(function()
	{
	jQuery(this).addClass('active');
	jQuery(this).siblings('a.image-view-btn, a.list-view-btn').removeClass('active');
	jQuery('div.amendo-staff-box').removeClass('amendo-staff-box').addClass('amendo-staff-box-text-view');
	employeeList();
	return false;
	});*/
	employeeList();
	$('#toparea li.languages').mouseenter(function() { $(this).children('div').show(); });
	$('#toparea li.languages').mouseleave(function() { $(this).children('div').hide(); });
	$('#headarea div.box').mouseenter(function()
	{
		var self = $(this);
		self.data('hovering', true);
		setTimeout(function()
		{
			if (self.data('hovering') == true)
			{
				self.children('.box-links').stop(true, true).slideDown('fast');
			}
		}, 100);
	});
	$('#headarea div.box').mouseleave(function()
	{
		var self = $(this);
		self.data('hovering', false);
		setTimeout(function()
		{
			if (self.data('hovering') != true)
			{
				self.children('.box-links').stop(true, true).slideUp('fast');
			}
		}, 100);
	});
	logoCarouselInit();

	$('a.show-login').click(loginOpen);
	$('a.hide-login').click(loginClose);

});

