document.write('<link rel="stylesheet" href="css/knxa-widget-global.css" type="text/css" />');

document.write('<scr' + 'ipt language="JavaScript" src="lib/jquery-1.3.2.min.js"></scr' + 'ipt>');
document.write('<scr' + 'ipt language="JavaScript" src="lib/jquery-ui-1.7.1.custom.min.js"></scr' + 'ipt>');
document.write('<scr' + 'ipt language="JavaScript" src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAja4ubf3RvkaL0eXKg8UYBBT0DtaY1R78RUpofvVAEmDvVcPHFxQvwSVZtgHyoLGgVgTddukajdAjuA"></scr' + 'ipt>');

var content_path = 'content/';

var knxa_widget = {
    labels: {},
    lang: 'default',
    tabs: [],
    jobs: {},
    ui: null,
    map: null,
    geocoder: null
};

window.onload = init;

function init() {
    load_widget_data();
}

function load_talentpool_data(page_number) {
    $.ajax({
	data: {
	    page: page_number
	},
	beforeSend: function(XMLHttpRequest) { },
	complete: function(XMLHttpRequest, textStatus) { 
	    $('#knxa-widget').html(build_widget_html());
	    activate();
	},
	dataType: 'xml',
	error: function(XMLHttpRequest, textStatus, errorThrown) {
	    load_talentpool_data(page_number);
	},
	success: function(data, textStatus) {
	    if(page_number == 1) {
		knxa_widget.jobs.talentpool = new Array(knxa_widget.tabs[2].items.length);
	    }
	    $('ResultSet Jobs Job', data).each(function(i) {
		var job = {
		    title: $.trim($('Question:first', this).text()), 
		    link: $.trim($('JobDetailLink', this).text()), 
		    location: $.trim($('Question:eq(2)', this).text()) + ' - ' + $.trim($('Question:eq(3)', this).text())
		};
		if(!$.isArray(knxa_widget.jobs.talentpool[0])) {
		    knxa_widget.jobs.talentpool[0] = new Array();
		}
		knxa_widget.jobs.talentpool[0].push(job);
	    });
	    if(parseInt($('ResultSet OtherInformation MaxPages', data).text()) > page_number) {
		load_talentpool_data(page_number + 1);
	    }
	},
	type: 'GET',
	url: 'content/jobdata_talentpool.php'
    });
}

function load_jobs_data(page_number) {
    var complete = false;
    $.ajax({
	data: { 
	    page: page_number 
	},
	beforeSend: function(XMLHttpRequest) { },
	complete: function(XMLHttpRequest, textStatus) { 
	    if(complete) {
		load_siena_jobs_data(1);
	    }
	},
	dataType: 'xml',
	error: function(XMLHttpRequest, textStatus, errorThrown) {
	    load_jobs_data(page_number);
	},
	success: function(data, textStatus) {
	    if(page_number == 1) {
		knxa_widget.jobs.functions = new Array(knxa_widget.tabs[0].items.length);
		knxa_widget.jobs.locations = new Array(knxa_widget.tabs[1].items.length);
	    }
            $('ResultSet Jobs Job', data).each(function(i) {
		var job = {
		    title: $.trim($('Question:first', this).text()), 
		    link: $.trim($('JobDetailLink', this).text()), 
		    location: $.trim($('Question:eq(2)', this).text()) + ' - ' + $.trim($('Question:eq(3)', this).text())
		};

		// functions
		var functions = ['Sales', 'Commericial & General Management', 'Corporate Affairs', 'Corporate Strategy', 'Development & Medical', 'Facilities and Administration', 'Finance', 'Human Resources', 'Information Technology', 'Legal & Intellectual Property', 'Logistics', 'Marketing', 'Production', 'Research'];
		var f_index = $.inArray($.trim($('Question:eq(8)', this).text()), functions);
		if((f_index != null) && (typeof f_index != 'undefined') && (f_index >= 0)) {
		    if(!$.isArray(knxa_widget.jobs.functions[f_index])) {
			knxa_widget.jobs.functions[f_index] = new Array();
		    }
		    knxa_widget.jobs.functions[f_index].push(job);
		}

		// locations
		var l_index = $.inArray($.trim($('Question:eq(3)', this).text()), knxa_widget.labels.locations);
		if((l_index != null) && (typeof l_index != 'undefined') && (l_index >= 0)) {
		    if(!$.isArray(knxa_widget.jobs.locations[l_index])) {
			knxa_widget.jobs.locations[l_index] = new Array();
		    }
		    knxa_widget.jobs.locations[l_index].push(job);
		}
	    });
	    if(parseInt($('ResultSet OtherInformation MaxPages', data).text()) > page_number) {
		load_jobs_data(page_number + 1);
	    } else {
		complete = true;
	    }
	},
	type: 'GET',
	url: 'content/jobdata.php'
    });
}

function load_siena_jobs_data(page_number) {
    var complete = false;
    $.ajax({
	data: { 
	    page: page_number 
	},
	beforeSend: function(XMLHttpRequest) { },
	complete: function(XMLHttpRequest, textStatus) { 
	    if(complete) {
		load_bern_jobs_data(1);
	    }
	},
	dataType: 'xml',
	error: function(XMLHttpRequest, textStatus, errorThrown) {
	    load_siena_jobs_data(page_number);
	},
	success: function(data, textStatus) {
	    if(!$.isArray(knxa_widget.jobs.functions)) {
		knxa_widget.jobs.functions = new Array(knxa_widget.tabs[0].items.length);
	    }
	    if(!$.isArray(knxa_widget.jobs.locations)) {
		knxa_widget.jobs.locations = new Array(knxa_widget.tabs[1].items.length);
	    }
            $('ResultSet Jobs Job', data).each(function(i) {
		var job = {
		    title: $.trim($('Question:first', this).text()), 
		    link: $.trim($('JobDetailLink', this).text()), 
		    location: $.trim($('Question:eq(2)', this).text()) + ' - ' + $.trim($('Question:eq(3)', this).text())
		};

		// functions
		var functions = ['Sales', 'Commericial & General Management', 'Corporate Affairs', 'Corporate Strategy', 'Development & Medical', 'Facilities and Administration', 'Finance', 'Human Resources', 'Information Technology', 'Legal & Intellectual Property', 'Logistics', 'Marketing', 'Production', 'Research'];
		var f_index = $.inArray($.trim($('Question:eq(8)', this).text()), functions);
		if((f_index != null) && (typeof f_index != 'undefined') && (f_index >= 0)) {
		    if(!$.isArray(knxa_widget.jobs.functions[f_index])) {
			knxa_widget.jobs.functions[f_index] = new Array();
		    }
		    knxa_widget.jobs.functions[f_index].push(job);
		}

		// locations
		var l_index = $.inArray($.trim($('Question:eq(3)', this).text()), knxa_widget.labels.locations);
		if((l_index != null) && (typeof l_index != 'undefined') && (l_index >= 0)) {
		    if(!$.isArray(knxa_widget.jobs.locations[l_index])) {
			knxa_widget.jobs.locations[l_index] = new Array();
		    }
		    knxa_widget.jobs.locations[l_index].push(job);
		}
	    });
	    if(parseInt($('ResultSet OtherInformation MaxPages', data).text()) > page_number) {
		load_siena_jobs_data(page_number + 1);
	    } else {
		complete = true;
	    }
	},
	type: 'GET',
	url: 'content/jobdata_siena.php'
    });
}

function load_bern_jobs_data(page_number) {
    $.ajax({
	data: { 
	    page: page_number 
	},
	beforeSend: function(XMLHttpRequest) { },
	complete: function(XMLHttpRequest, textStatus) { 
	    load_talentpool_data(1);
	},
	dataType: 'xml',
	error: function(XMLHttpRequest, textStatus, errorThrown) {
	    load_bern_jobs_data(page_number);
	},
	success: function(data, textStatus) {
	    if(!$.isArray(knxa_widget.jobs.functions)) {
		knxa_widget.jobs.functions = new Array(knxa_widget.tabs[0].items.length);
	    }
	    if(!$.isArray(knxa_widget.jobs.locations)) {
		knxa_widget.jobs.locations = new Array(knxa_widget.tabs[1].items.length);
	    }
            $('ResultSet Jobs Job', data).each(function(i) {
		var job = {
		    title: $.trim($('Question:first', this).text()), 
		    link: $.trim($('JobDetailLink', this).text()), 
		    location: $.trim($('Question:eq(2)', this).text()) + ' - ' + $.trim($('Question:eq(3)', this).text())
		};

		// functions
		var functions = ['Sales', 'Commericial & General Management', 'Corporate Affairs', 'Corporate Strategy', 'Development & Medical', 'Facilities and Administration', 'Finance', 'Human Resources', 'Information Technology', 'Legal & Intellectual Property', 'Logistics', 'Marketing', 'Production', 'Research'];
		var f_index = $.inArray($.trim($('Question:eq(8)', this).text()), functions);
		if((f_index != null) && (typeof f_index != 'undefined') && (f_index >= 0)) {
		    if(!$.isArray(knxa_widget.jobs.functions[f_index])) {
			knxa_widget.jobs.functions[f_index] = new Array();
		    }
		    knxa_widget.jobs.functions[f_index].push(job);
		}

		// locations
		var l_index = $.inArray($.trim($('Question:eq(3)', this).text()), knxa_widget.labels.locations);
		if((l_index != null) && (typeof l_index != 'undefined') && (l_index >= 0)) {
		    if(!$.isArray(knxa_widget.jobs.locations[l_index])) {
			knxa_widget.jobs.locations[l_index] = new Array();
		    }
		    knxa_widget.jobs.locations[l_index].push(job);
		}
	    });
	    if(parseInt($('ResultSet OtherInformation MaxPages', data).text()) > page_number) {
		load_bern_jobs_data(page_number + 1);
	    }
	},
	type: 'GET',
	url: 'content/jobdata_bern.php'
    });
}

function load_widget_data() {
    var data_loaded = false; 
    var content_file_url = content_path + knxa_widget.lang + '.xml';
    $.ajax({
	beforeSend: function(XMLHttpRequest) {
	    $('#knxa-widget').html('<div class="loading"></div>');
	},
	complete: function(XMLHttpRequest, textStatus) {
	    if(data_loaded) {
		load_jobs_data(1);
	    }
	},
	dataType: 'xml',
	error: function(XMLHttpRequest, textStatus, errorThrown) {
	    load_widget_data();
	},
	success: function(data, textStatus) {
	    if(!$.isArray(knxa_widget.tabs)) {
		knxa_widget.tabs = new Array();
	    }
	    if(!$.isArray(knxa_widget.labels.locations)) {
		knxa_widget.labels.locations = new Array();
	    }
	    $('group', data).each(function(i) {
		var group = this;
		var new_items = new Array();
		$('item', group).each(function(k) {
		    var new_item = {
			title: $('title', this).text(),
			geo: $('geo', this).text()
		    };
		    if((typeof new_item.geo != 'undefined') && (new_item.geo != '')) {
			knxa_widget.labels.locations.push(new_item.title);
		    }
		    new_items.push(new_item);
		});
		if(new_items.length == 0) {
		    new_items.push({
			title: 'Job Listings',
			geo: ''
		    });
		}
		var new_tab = {
		    id: 'tab-' + (i + 1),
		    label: $('name', group).text(),
		    current: 0,
		    items: new_items
		};
		knxa_widget.tabs.push(new_tab);
	    });

	    knxa_widget.labels.title = $('labels title', data).text();
	    knxa_widget.labels.nojobs = $('labels nojobs', data).text();
	    knxa_widget.labels.search = {name: $('labels search name', data).text(), link: $('labels search link', data).text()};

	    data_loaded = true;
	},
	type: 'GET',
	url: content_file_url
    });
}

function build_widget_html() {
    return '<div class="knxa-hdr">' + build_header_html() + '</div><div class="knxa-main"><div class="knxa-tabs">' + build_tabs_html() + '</div><div class="knxa-item"><div class="knxa-item-cnt">' + build_content_html() + '</div></div></div><div class="knxa-ftr">' + build_footer_html() + '</div>';
}

function build_header_html() {
    return '<div class="knxa-hdr-cnt"><span>' + knxa_widget.labels.title + '</span><div class="knxa-hdr-links">' + build_links_html() + '</div></div>';
}

function build_links_html() {
    var links_html = '';
    links_html += '<li><a href="' + knxa_widget.labels.search.link + '" title="' + knxa_widget.labels.search.name + '" target="_blank">' + knxa_widget.labels.search.name + '</a></li>';
    return '<ul>' + links_html + '</ul>';
}

function build_footer_html() {
    return '<div class="knxa-ftr-cnt"></div>';
}

function build_tabs_html() {
    var tabs_html = '<ul>';
    for(var i = 0; i < knxa_widget.tabs.length; i++) {
	tabs_html += '<li';
	if(i == knxa_widget.tabs.length - 1) {
	    tabs_html += ' class="long"';
	}
	tabs_html += '><a href="#' + knxa_widget.tabs[i].id + '" title="' + knxa_widget.tabs[i].label + '">' + knxa_widget.tabs[i].label + '</a></li>';
    }
    tabs_html += '</ul>';
    return tabs_html;
}

function build_content_html() {
    var content_html = '';
    for(var i = 0; i < knxa_widget.tabs.length; i++) {
	content_html += '<div id="' + knxa_widget.tabs[i].id + '"><div class="knxa-tab-hdr"></div><div class="knxa-tab-cnt"></div></div>';
    }
    return content_html;
}

function update_expanding_lists(index) {
    var list_html = '';
    if(knxa_widget.tabs[index].items.length > 0) {
	if(typeof knxa_widget.tabs[index].items[0].title != 'undefined') {
	    for(var i = 0; i < knxa_widget.tabs[index].items.length; i++) {
		var sublist = build_job_sublist(index, i);
		if(knxa_widget.tabs[index].items.length > 1) {
		    list_html += '<li id="sublist-' + index + '-' + i + '"><a href="javascript:void(0)" onclick="javascript:toggle_sublist(this)" title="Open ' + knxa_widget.tabs[index].items[i].title + '">' + knxa_widget.tabs[index].items[i].title + ' (' + get_job_sublist_count(index, i) + ')</a>' + sublist + '</li>';
		} else {
		    list_html += '<li id="sublist-open"><a style="display: none;" href="javascript:void(0)" title="' + knxa_widget.tabs[index].items[i].title + '">' + knxa_widget.tabs[index].items[i].title + ' (' + get_job_sublist_count(index, i) + ')</a><p style="font-weight: normal; color: #333;">' + knxa_widget.tabs[index].items[i].title + '</p>' + sublist + '</li>';
		}
	    }
	    $('#' + knxa_widget.tabs[index].id + ' .knxa-tab-cnt').html('<ul>' + list_html + '</ul>');
	} 
	if((typeof knxa_widget.tabs[index].items[0].geo != 'undefined') && (knxa_widget.tabs[index].items[0].geo != '')) {
	    initialize_map(index);
	    for(var i = 0; i < knxa_widget.tabs[index].items.length; i++) {
		var point = knxa_widget.tabs[index].items[i].geo.split(',');
		knxa_widget.map.addOverlay(create_marker(new GLatLng(point[1], point[0]), knxa_widget.tabs[index].items[i].title, index, i));
	    }
	}
    }
}

function toggle_sublist(element) {
    if(!$(element).siblings().hasClass('open')) {
	$(element).addClass('open');	
	$(element).siblings().addClass('open');
    } else {
	$(element).siblings().removeClass('open');
	$(element).removeClass('open');
    }
}

function build_job_sublist(tab, item) {
    var list_html = '';
    var jobs = null;
    if(tab == 0) {
	jobs = knxa_widget.jobs.functions[item];
    } else if(tab == 1) {
	jobs = knxa_widget.jobs.locations[item];
    } else if(tab == 2) {
	jobs = knxa_widget.jobs.talentpool[item];
    }
    
    if(jobs != null) {
	for(var k = 0; k < jobs.length; k++) {
	    if(typeof jobs[k].title != 'undefined') {
		list_html += '<li' + ((k % 2 == 0) ? ' class="even"' : '') + '><a href="' + jobs[k].link + '" target="_blank">' + jobs[k].title + '</a><br />' + jobs[k].location + '</li>';
	    }
	}
    }
    if(list_html == '') {
	list_html = '<li class="even">' + knxa_widget.labels.nojobs + '</li>';
    }
    return '<ul>' + list_html + '</ul>';
}

function get_job_sublist_count(tab, item) {
    var jobs = null;
    if(tab == 0) {
	jobs = knxa_widget.jobs.functions[item];
    } else if(tab == 1) {
	jobs = knxa_widget.jobs.locations[item];
    } else if(tab == 2) {
	jobs = knxa_widget.jobs.talentpool[item];
    }

    return (jobs != null) ? jobs.length : 0;
}

function activate() {
    knxa_widget.ui = $('.knxa-tabs').tabs({
	load: function(event, ui) {
	    $knxa_widget.ui.tabs('select', '#' + ui.panel.id);
	},
	select: function(event, ui) {
	    update_all_content(ui.index);
	},
	show: function(event, ui) {
	    if(ui.index == 1) {
		knxa_widget.map.checkResize();
	    } else if(ui.index == 2) {
		toggle_sublist($('#sublist-open a').get(0));
	    }
	}
    });
    $('.lang a').click(function() {
	knxa_widget.lang = $(this).attr('class');
	load_widget_data();
    });

    update_all_content(knxa_widget.ui.tabs('option', 'selected'));
}

function update_all_content(tab) {
    update_item_content(tab);
}

function update_item_content(tab) {
    update_expanding_lists(tab);
    $('#' + knxa_widget.tabs[tab].id + ' .knxa-tab-hdr, .knxa-tab-cnt').show();
}

function initialize_map(index) {
    if($('#' + knxa_widget.tabs[index].id + ' .knxa-tab-cnt #knxa-widget-map').size() == 0) {
	$('#' + knxa_widget.tabs[index].id + ' .knxa-tab-cnt').prepend('<div id="knxa-widget-map"></div>');
    }

    knxa_widget.map = new GMap2($('#' + knxa_widget.tabs[index].id + ' .knxa-tab-cnt #knxa-widget-map').get(0));
    knxa_widget.map.setCenter(new GLatLng(70, -150), 2);
    knxa_widget.map.setUIToDefault();

    knxa_widget.geocoder = new GClientGeocoder();

    GEvent.addListener(knxa_widget.map, 'infowindowclose', function() {
	$('.knxa-tab-cnt li[id^=sublist]').show();
    });
}

function create_marker(latlon, content, tab, item) {
    var marker = new GMarker(latlon)
    GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml('<span class="marker"><span class="marker-title">' + content + '</span><br /><br />' + get_job_sublist_count(tab, item) + ' job listing(s)</span>');
	$('#' + knxa_widget.tabs[tab].id + ' .knxa-tab-cnt li[id^=sublist]').hide();
	$('#' + knxa_widget.tabs[tab].id + ' .knxa-tab-cnt li#sublist-' + tab + '-' + item).show();
    });
    return marker;
}