/*

UPDATE: 27-01-12
Due to new features requiring the language code to be passed, this script is obsolete.
Instead, please use 'search_bar.php'

*/

Array.prototype.has = function(v) {
	for (i = 0; i < this.length; i++){
		if (this[i]==v) return i;
	}
	return false;
}

var sprintfWrapper = {
 
	init : function () {
 
		if (typeof arguments == 'undefined') { return null; }
		if (arguments.length < 1) { return null; }
		if (typeof arguments[0] != 'string') { return null; }
		if (typeof RegExp == 'undefined') { return null; }
 
		var string = arguments[0];
		var exp = new RegExp(/(%([%]|(\-)?(\+|\x20)?(0)?(\d+)?(\.(\d)?)?([bcdfosxX])))/g);
		var matches = new Array();
		var strings = new Array();
		var convCount = 0;
		var stringPosStart = 0;
		var stringPosEnd = 0;
		var matchPosEnd = 0;
		var newString = '';
		var match = null;
 
		while (match = exp.exec(string)) {
			if (match[9]) { convCount += 1; }
 
			stringPosStart = matchPosEnd;
			stringPosEnd = exp.lastIndex - match[0].length;
			strings[strings.length] = string.substring(stringPosStart, stringPosEnd);
 
			matchPosEnd = exp.lastIndex;
			matches[matches.length] = {
				match: match[0],
				left: match[3] ? true : false,
				sign: match[4] || '',
				pad: match[5] || ' ',
				min: match[6] || 0,
				precision: match[8],
				code: match[9] || '%',
				negative: parseInt(arguments[convCount]) < 0 ? true : false,
				argument: String(arguments[convCount])
			};
		}
		strings[strings.length] = string.substring(matchPosEnd);
 
		if (matches.length == 0) { return string; }
		if ((arguments.length - 1) < convCount) { return null; }
 
		var code = null;
		var match = null;
		var i = null;
 
		for (i=0; i<matches.length; i++) {
 			
 			var substitution;
 			
			if (matches[i].code == '%') { substitution = '%' }
			else if (matches[i].code == 'b') {
				matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(2));
				substitution = sprintfWrapper.convert(matches[i], true);
			}
			else if (matches[i].code == 'c') {
				matches[i].argument = String(String.fromCharCode(parseInt(Math.abs(parseInt(matches[i].argument)))));
				substitution = sprintfWrapper.convert(matches[i], true);
			}
			else if (matches[i].code == 'd') {
				matches[i].argument = String(Math.abs(parseInt(matches[i].argument)));
				substitution = sprintfWrapper.convert(matches[i]);
			}
			else if (matches[i].code == 'f') {
				matches[i].argument = String(Math.abs(parseFloat(matches[i].argument)).toFixed(matches[i].precision ? matches[i].precision : 6));
				substitution = sprintfWrapper.convert(matches[i]);
			}
			else if (matches[i].code == 'o') {
				matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(8));
				substitution = sprintfWrapper.convert(matches[i]);
			}
			else if (matches[i].code == 's') {
				matches[i].argument = matches[i].argument.substring(0, matches[i].precision ? matches[i].precision : matches[i].argument.length)
				substitution = sprintfWrapper.convert(matches[i], true);
			}
			else if (matches[i].code == 'x') {
				matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
				substitution = sprintfWrapper.convert(matches[i]);
			}
			else if (matches[i].code == 'X') {
				matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
				substitution = sprintfWrapper.convert(matches[i]).toUpperCase();
			}
			else {
				substitution = matches[i].match;
			}
 
			newString += strings[i];
			newString += substitution;
 
		}
		newString += strings[i];
 
		return newString;
 
	},
 
	convert : function(match, nosign){
		if (nosign) {
			match.sign = '';
		} else {
			match.sign = match.negative ? '-' : match.sign;
		}
		var l = match.min - match.argument.length + 1 - match.sign.length;
		var pad = new Array(l < 0 ? 0 : l).join(match.pad);
		if (!match.left) {
			if (match.pad == '0' || nosign) {
				return match.sign + pad + match.argument;
			} else {
				return pad + match.sign + match.argument;
			}
		} else {
			if (match.pad == '0' || nosign) {
				return match.sign + match.argument + pad.replace(/0/g, ' ');
			} else {
				return match.sign + match.argument + pad;
			}
		}
	}
}

var seed = Math.random() * 10000;

var sprintf = sprintfWrapper.init;

var proximity_search_country_ids = {
	19: '', // Austria
	1: '', // Belgium
	5: '', // Denmark
	7: '', // Finland
	8: '', // France
	4: '', // Germany
	21: '', // Greece
	11: '', // Italy
	12: '', // Luxembourg
	13: '', // Netherlands
	14: '', // Norway
	15: '', // Portugal
	6: '', // Spain
	16: '', // Sweden
	3: '', // Switzerland
	9: '' // United Kingdom
};

jQuery(document).ready(function() {
	
	jQuery.ajaxSetup({
		timeout: 10000
	});
	
	/*
	if (navigator.geolocation) {
		var watchID = navigator.geolocation.getCurrentPosition(got_user_geolocation);  
	}
	*/
	
	jQuery('#l_col .segment ul.spec_filter_list').listen('click', 'li a', function(e) {
		
		if (jQuery(this).hasClass('close')) {
			jQuery(this).parent().removeClass('selected');
		} else {
			jQuery(this).parent().addClass('selected');
		}
		jQuery(this).blur();
		e.preventDefault();
		
		reset_paginator = true;
		get_results();
	});
	
	jQuery('#l_col .segment ul.focus_filter_list').listen('click', 'li a', function(e) {
		
		if (jQuery(this).hasClass('close')) {
			jQuery(this).parent().removeClass('selected');
		} else {
			jQuery(this).parent().addClass('selected');
		}
		jQuery(this).blur();
		e.preventDefault();
		
		reset_paginator = true;
		get_results();
	});
	
	jQuery('#l_col .segment ul.tier_filter_list').listen('click', 'li a', function(e) {
		
		if (jQuery(this).hasClass('close')) {
			jQuery(this).parent().removeClass('selected');
		} else {
			jQuery(this).parent().addClass('selected');
		}
		jQuery(this).blur();
		e.preventDefault();
		
		reset_paginator = true;
		get_results();
	});
	
	jQuery('#l_col .segment ul.tier_proposed_list').listen('click', 'li a', function(e) {
		
		if (jQuery(this).hasClass('close')) {
			jQuery(this).parent().removeClass('selected');
		} else {
			jQuery(this).parent().addClass('selected');
		}
		jQuery(this).blur();
		e.preventDefault();
		
		reset_paginator = true;
		get_results();
	});
	
	jQuery('#l_col .segment ul.spec_flag_list').listen('click', 'li a', function(e) {
		
		if (jQuery(this).hasClass('close')) {
			jQuery(this).parent().removeClass('selected');
		} else {
			jQuery(this).parent().addClass('selected');
		}
		jQuery(this).blur();
		e.preventDefault();
		
		reset_paginator = true;
		get_results();
	});
	
	jQuery('#l_col .segment #range').listen('click', 'li a', function(e) {
		
		jQuery(this).parent().parent().find('li').each(function(l) {
			jQuery(this).removeClass('selected');
		});
		
		jQuery(this).parent().addClass('selected');
		jQuery(this).blur();
		e.preventDefault();
		
		if (jQuery('#address').val() != '') {
			reset_paginator = true;
			get_results();
		}
		
	});
	
	jQuery('#proximity_tab_switcher').click(function() {
		jQuery('#proximity_tab').addClass('selected');
		jQuery('#region_tab').removeClass('selected');
		
		jQuery('#region_tab_switcher').removeClass('selected');
		jQuery('#proximity_tab_switcher').addClass('selected');
		
		jQuery(this).find('a').blur();
		return false;
	});
	
	jQuery('#region_tab_switcher').click(function() {
		jQuery('#proximity_tab').removeClass('selected');
		jQuery('#region_tab').addClass('selected');
		
		jQuery('#region_tab_switcher').addClass('selected').hide().show();
		jQuery('#proximity_tab_switcher').removeClass('selected');
		
		jQuery(this).find('a').blur();
		return false;
	});
	
	jQuery('#r_col #paginator').listen('click', 'li a', function(e) {
			
			var page_number = jQuery(this).parent().attr('id').split('-')[1];
			goto_page_number = page_number;
			jQuery(this).parent().parent().find('li.selected').removeClass('selected');
			
			jQuery(this).parent().parent().find('li#page-' + page_number).addClass('selected');
			jQuery(this).blur();
			
			e.preventDefault();
			
			reset_paginator = false;
			get_results();
			

	});
	

	jQuery('#proximity_form').submit(function() {
	
		if (jQuery('#range li.selected').length != 1) {
			jQuery('#range li').each(function(i) {
				if (i == 0) {
					jQuery(this).addClass('selected');
				}
			});
		}
	
		reset_paginator = true;
		return get_results();
	});

	bind_city_change_event();
	bind_region_change_event();
	
	jQuery('.country_selector').click(function() {
		
		if (jQuery('#country_popup').css('display') == 'none') {
			// FIX stupid ie z-index bug
			jQuery('#results #rows').css('z-index', '-1');
			jQuery('#country_popup').css('display', 'block');
		} else {
			// FIX stupid ie z-index bug
			jQuery('#results #rows').css('z-index', '0');
			jQuery('#country_popup').css('display', 'none');
		}
		
		return false;
		
		
	});
	
	
	jQuery('#country_popup ul').listen('click', 'li a img', select_country);
	jQuery('#country_popup ul').listen('click', 'li a span', select_country);
	
	jQuery('#select_distributor').click(function() {
	
		jQuery('#select_distributor').addClass('selected');
		jQuery('#select_reseller').removeClass('selected');
	
		jQuery('.segment').css('display', 'none');
		jQuery('#country_segment').css('display', 'block');
		
		
		
		reset_paginator = true;
		get_countries(true);
		get_results();
		
		return false;
	
	});
	
	jQuery('#select_reseller').click(function() {
	
		jQuery('#select_distributor').removeClass('selected');
		jQuery('#select_reseller').addClass('selected');
	
		jQuery('.segment').css('display', 'block');
		
		var country_id = jQuery('#country_id').text();
		
		get_cities(country_id);
		get_regions(country_id);
		
		get_countries(false);
	
		get_results();
	
		return false;
	
	});
	
	jQuery('body').listen('mouseover', '.popup_trigger', function (e) {
		var index = jQuery(this).attr('id').indexOf('_trigger');
		var popup_id = jQuery(this).attr('id').substring(0, index);
		jQuery('#' + popup_id).css({display: 'block', 'z-index': '9999'});
	});
	
	jQuery('body').listen('mouseout', '.popup_trigger', function (e) {
		var index = jQuery(this).attr('id').indexOf('_trigger');
			var popup_id = jQuery(this).attr('id').substring(0, index);
			jQuery('#' + popup_id).css({display: 'none'});
	});
	
	jQuery('body').listen('mousemove', '.popup_trigger', function (e) {
		var index = jQuery(this).attr('id').indexOf('_trigger');
		var popup_id = jQuery(this).attr('id').substring(0, index);
		jQuery('#' + popup_id).css({top: e.pageY - 25, left: e.pageX + 15});
	});
	
});

function got_user_geolocation(position) {

	var latitude = position.coords.latitude;
	var longitude = position.coords.longitude;
	
	var s = latitude + ', ' + longitude;
	jQuery('#address').val(s);
	jQuery('#proximity_form').submit();

}

function bind_city_change_event() {
	jQuery('#city').change(function() {
		clear_select_box('#region');
		jQuery('#address').val('');
		reset_paginator = true;
		return get_results();
	});
}

function bind_region_change_event() {
	jQuery('#region').change(function() {
		clear_select_box('#city');
		jQuery('#address').val('');
		reset_paginator = true;
		return get_results();
	});
}

function save_state() {
	
	var country_id = jQuery('#country_id').text();

	jQuery.cookie('saved_country_id', country_id);
	
	jQuery.cookie('save_state', true);

}

var loading_state = false;

function load_state() {

	if (jQuery.cookie('save_state') != null) {
		loading_state = true;
		jQuery('#country-' + jQuery.cookie('saved_country_id') + ' a span').click();
		get_results();
		loading_state = false;
	} else {
		get_results();
	}

}

// courtesy of yet another IE bug
function clear_select_box(id) {
	jQuery('#' + id + ' option').each(function(i) {
		if (i == 0) {
			this.selected = 'selected="selected"';
		} else {
			this.selected = '';
		}
	});
}

function select_country(e) {

	if (jQuery(this).parent('li').hasClass('disabled')) {
		return false;
	}

	var country_id = jQuery(this).parent().parent().attr('id').split('-')[1];
	var country_name = trans(jQuery(this).parent().find('span').text());
	
	jQuery('#country').text(country_name);
	jQuery('#country_id').text(country_id);
	
	// reload the city and region list
	
	if (!loading_state) {
		if (jQuery('#country_popup').css('display') == 'none') {
			// FIX stupid ie z-index bug
			jQuery('#results #rows').css('z-index', '-1');
			jQuery('#country_popup').css('display', 'block');
		} else {
			// FIX stupid ie z-index bug
			jQuery('#results #rows').css('z-index', '0');
			jQuery('#country_popup').css('display', 'none');
		}
	}
	
	reset_paginator = true;
	
	clear_select_box('#region');
	clear_select_box('#city');
	
	jQuery('#address').val('');
	
	get_results();
	
	e.preventDefault();
	
	if (jQuery('#select_reseller.selected').length) {
		get_cities(country_id);
		get_regions(country_id);
	}

	// hide proximity tab
	if (!(country_id in proximity_search_country_ids)) {
		jQuery('#region_tab_switcher').click().removeClass('selected').attr('id', 'one_tab');
		jQuery('#proximity_tab_switcher').css('display', 'none');
	} else {
		jQuery('#one_tab').attr('id', 'region_tab_switcher');
		jQuery('#proximity_tab_switcher').click().css('display', 'block');
	}
	
}

var reset_paginator = true;

function get_countries(is_disti) {
	
	var url = '/country_selector.php';
	
	var data = {
		is_disti: is_disti
	};
	
	jQuery.get(url, data, got_countries, 'html');
	
}

function got_countries(data, text_status) {
	
	jQuery('#country_popup').empty().append(data);
	
	jQuery('#country_popup ul').listen('click', 'li a img', select_country);
	jQuery('#country_popup ul').listen('click', 'li a span', select_country);
	
}

function get_cities(country_id) {
	var url = '/city_list.php';
	
	var data = {
		country_id: country_id
	};
	
	jQuery.get(url, data, got_cities, 'text');
	
}

function got_cities(data, text_status) {
	jQuery('#city_container').empty().append(data);
	bind_city_change_event();
}

function get_regions(country_id) {
	var url = '/region_list.php';
	
	var data = {
		country_id: country_id
	};
	
	jQuery.get(url, data, got_regions, 'text');
	
}

function got_regions(data, text_status) {
	jQuery('#region_container').empty().append(data);
	bind_region_change_event();
}

var goto_page_number = 1;

function get_results() {
	var url = '/proximity_results.php';
	
	// filter by which flags
	
	var spec_filter_flags = '';
	
	jQuery('.spec_filter_list li.selected a').each(function() {
	
		if (jQuery(this).hasClass('close')) {
			return;
		}
		
		spec_filter_flags += jQuery(this).attr('id').split('-')[1] + ',';
	});
	
	var focus_filter_flags = '';
	
	jQuery('.focus_filter_list li.selected a').each(function() {
	
		if (jQuery(this).hasClass('close')) {
			return;
		}
		
		focus_filter_flags += jQuery(this).attr('id').split('-')[1] + ',';
	});
	
	var tier_filter_flags = '';
	
	jQuery('.tier_filter_list li.selected a').each(function() {
	
		if (jQuery(this).hasClass('close')) {
			return;
		}
		
		tier_filter_flags += jQuery(this).attr('id').split('-')[1] + ',';
	}); 
	
	var spec_flags = '';
	
	jQuery('.spec_flag_list li.selected a').each(function() {
		
		if (jQuery(this).hasClass('close')) {
			return;
		}
		
		spec_flags += jQuery(this).attr('id').split('-')[1] + ',';
	});
	
	var tier_proposed_flags = '';
	
	jQuery('.tier_proposed_list li.selected a').each(function() {
	
		if (jQuery(this).hasClass('close')) {
			return;
		}
		
		tier_proposed_flags += jQuery(this).attr('id').split('-')[1] + ',';
	});

	var page_number = goto_page_number;
	var address = jQuery('#address').val();
	var city = jQuery('#city option:selected').text();
	var region = jQuery('#region option:selected').text();
	var country = jQuery('#country').text();
	var country_id = jQuery('#country_id').text();
	var range = jQuery('#range .selected a').text();
	var distributor = '';
	
	if (jQuery('#select_distributor').hasClass('selected')) {
		distributor = 'yes';	
	}
	
	if (reset_paginator) {
		// reset paginator
		page_number = 1;	
	}
	
	var data = {
		address: address,
		city: city,
		region: region,
		country: country,
		country_id: country_id,
		distributor: distributor,
		range: range,
		page_number: page_number,
		spec_filter_flags: spec_filter_flags,
		focus_filter_flags: focus_filter_flags,
		tier_filter_flags: tier_filter_flags,
		tier_proposed_flags: tier_proposed_flags,
		spec_flags: spec_flags,
		seed: seed
	};
	
	jQuery.get(url, data, got_results, 'xml');
	
	jQuery('body').ajaxError(general_error);
	
	jQuery('#results #spinner_overlay').css('display', 'block');

	return false;
}

function general_error(e, xhr, options, thrownError) {
	jQuery('#results #spinner_overlay').css('display', 'none');
}

function got_results(data, text_status) {
	var $data = jQuery(data);

	var query = $data.find('query').text();
	var num_results = $data.find('total_num_results').text();
	var start_num = $data.find('start_num').text();
	var num_per_page = $data.find('num_per_page').text();
	var notification = $data.find('notification').text();
	
	jQuery('#notification').empty();
	
	if (notification != '') {
		jQuery('#notification').append('<p>' + notification + '</p>');
	}
	
	jQuery('#num_results').text(num_results + " results for " + query);
	
	var to_num = (parseInt(start_num) + parseInt(num_per_page));
	
	if (to_num > num_results) {
		to_num = num_results;
	}
	
	jQuery('#num_results').text(sprintf(trans('Partners %s - %s of %s matches'), (parseInt(start_num) + 1), to_num, num_results));

	//if (reset_paginator) {
		setup_paginator(num_results, start_num, num_per_page);
	//}
	
	jQuery('#results #rows').empty();
	jQuery('#results #rows').append('<div id="spinner_overlay"></div>');
	
	if (num_results == '0') {
		jQuery('#num_results').text(trans('sorry_no_results'));
		return;
	}
	
	$data.find('result').each(function() {
		var $this = jQuery(this);
		
		var partner_tier = $this.find('partner_tier').attr('id');
		var reseller_club = $this.find('reseller_club').attr('id');
		var product_spec = $this.find('product_spec').attr('id');
		
		var s = '<div class="result"><p>' + $this.find('organisation_name').text() + '</p>';
		
		s += '<a href="#" class="show_location" onclick="get_partner_info(' + $this.find('organisation_id').text() + '); return false;"><span>' + trans('Show Details') + '</span></a>';
		
		s += '<table><tr>';
		
		$this.find('product_spec').each(function() {

			var product_spec = jQuery(this).attr('id');

			var logo = '';
			var text = '';
			var popup = '';
			
			switch (product_spec) {
			
			case "1":
				// xSP Reseller
				logo = 'xSP_Icon.jpg';
				text = 'xSP Reseller';
				popup = 'xsp_popup_trigger';
				break;
			
			}
		
			s += '<td><img src="/images/trend_logos/' + logo + '" class="popup_trigger" id="' + popup + '"/></td>';
			
		});
		
		$this.find('reseller_club').each(function() {

			var reseller_club = jQuery(this).attr('id');

			var logo = '';
			var text = '';
			var popup = '';
			
			switch (reseller_club) {
			
			case "1":
				// Elite
				logo = 'Elite_Icon.jpg';
				text = 'Elite';
				popup = 'elite_club_popup_trigger';
				break;
			case "2":
				// Experts
				logo = 'Experts_Icon.jpg';
				text = 'Expert';
				popup = 'experts_club_popup_trigger';
				break;
			case "3":
				// Champions
				logo = 'Champions_Icon.jpg';
				text = 'Champion';
				popup = 'champion_club_popup_trigger';
				break;
			
			}
		
			s += '<td><img src="/images/trend_logos/' + logo + '" class="popup_trigger" id="' + popup + '"/></td>';
			
		});
		
		$this.find('partner_spec').each(function() {
			var partner_spec = jQuery(this).attr('id');
			
			var logo = '';
			var text = '';
			var popup = '';
			
			switch (partner_spec) {
				case "1":
					// Network & Systems
					logo = 'NetworkSpecLogo.png';
					text = 'Network & Systems Security';
					popup = 'network_spec_popup_trigger';
					break;
				case "2":
					// Data Protection
					logo = 'DataProtectionSpecLogo.png';
					text = 'Data Protection Security';
					popup = 'dataprotection_spec_popup_trigger';
					break;
				case "3":
					// Cloud & Data Centre
					logo = 'CloudSpecLogo.png';
					text = 'Cloud & Data Centre Security';
					popup = 'cloud_spec_popup_trigger';
					break;
				case "4":
					// Endpoint Mobility
					logo = 'EndpointSpecLogo.png';
					text = 'Endpoint Mobility Security';
					popup = 'endpoint_spec_popup_trigger';
					break;
				case "5":
					// Small Business
					logo = 'SmallBusinessSpecLogo.png';
					text = 'Small Business Security';
					popup = 'smallbusiness_spec_popup_trigger';
					break;	
			}
			
			s += '<td><img src="/images/trend_logos/' + logo + '" class="popup_trigger" id="' + popup + '"/></td>';
		})
		
		$this.find('partner_tier').each(function() {

			var partner_tier = jQuery(this).attr('id');

			var logo = '';
			var text = '';
			var popup = '';
			
			switch (partner_tier) {

			case "1":
				// Silver Tier
				logo = 'SilverTierLogo.gif';
				text = 'Silver';
				popup = 'silver_popup_trigger';
				break;
			case "2":
				// Gold Tier
				logo = 'GoldTierLogo.gif';
				text = 'Gold';
				popup = 'gold_popup_trigger';
				break;
			case "3":
				// Platinum
				logo = 'PlatinumTierLogo.gif';
				text = 'Platinum';
				popup = 'platinum_popup_trigger';
				break;
			
			case "4":
				// Platinum
				logo = 'BronzeTierLogo.gif';
				text = 'Bronze';
				popup = 'bronze_popup_trigger';
				break;
			
			}
		
			s += '<td><img src="/images/trend_logos/' + logo + '" class="popup_trigger" id="' + popup + '"/></td>';
			
		});
		
		s += '</tr></table>';
		
		s += '</div>';
		
		jQuery('#results #rows').append(s);
		
	});
	
	jQuery('#results .result:odd').each(function() {
		jQuery(this).addClass('odd');
	});
	
	jQuery('#results .result:last').addClass('last');
	
};

function get_partner_info(organisation_id) {

	jQuery('#partner_info').empty().append('<div id="modal"><div id="popup_spinner_overlay"></div></div>');
	jQuery('#partner_info').modal({position: [20, null]});
	
	var url = '/partner_popup.php';
	
	var data = {
		organisation_id: organisation_id
	};
	
	jQuery.get(url, data, got_partner_info, 'html');
	
	//window.location = '#';
	
}

function got_partner_info(data, text_status) {
	jQuery('#partner_info').empty().append(data);
}

function setup_paginator(num_results, start_num, num_per_page) {

	// number of buttons to show before and after the selected page
	var nb = 2;
	var na = 2;

	var pages = Math.ceil(num_results / num_per_page);
	var current_page = Math.floor(start_num / num_per_page) + 1;

	var $paginator = jQuery('#paginator');
	$paginator.empty();
	
	if (num_results == 0) {
		return;
	}
	
	var page_first = 1;
	var page_last = pages;
	
	var page_prev = current_page - 1;
	var page_next = current_page + 1;
	
	if (page_prev < page_first) {
		page_prev = page_first;
	}
	
	if (page_next > pages) {
		page_next = pages;
	}
	
	// decide which ones to show

	var show_total = 10;
	
	if (show_total > pages) {
		show_total = pages;	
	}
	
	var show_before = Math.floor((show_total - 1) / 2);
	var show_after = show_total - 1 - show_before;
	
	var start = current_page - show_before;
	var end = current_page + show_after;
	
	if (start < 1 && end > pages) {
		start = 1;
		end = pages;
	} else if (start < 1) {
		
		var diff = 1 - start;
		start = 1;
		end = end + diff;
		
		if (end > pages) {
			end = pages;
		} 
	
	
	} else if (end > pages) {
	
		var diff = pages - end;
		start = start + diff;
		end = pages;
		
		if (start < 1) {
			start = 1;
		}
	
	}
	
	var ul = '<ul>';
	
	if (current_page != 1) {
		ul += '<li class="goto" id="goto-' + page_first + '"><a href="#">&laquo;</a></li><li class="goto" id="goto-' + page_prev + '"><a href="#">&lsaquo;</a></li>';
	}
	
	for (var i = start; i <= end; i++) {
	
		if (i == current_page) {
			var s = ' class="selected"';
		} else {
			s = '';
		}
	
		ul += '<li id="page-' + i + '" ' + s + '><a href="#">' + i + '</a></li>';
	}
	
	if (current_page != pages) {
		ul += '<li class="goto" id="goto-' + page_next + '"><a href="#">&rsaquo;</a></li><li class="goto" id="goto-' + page_last + '"><a href="#">&raquo;</a></li>';
	}
	
	$paginator.append(ul);

}































