function check_handler(event){
	var s = this.value;
	if(s.charAt(0) == '.'){ // tld
		check_all_tld(s);
	}
	else{
		check_all_name(s);
	}
}

function to_std(string, suffix){
	suffix = (suffix == null || suffix == undefined) ? 'e' : suffix;
	return string.replace(/\./g, '--') + suffix;
}

function from_std(string){
	return string.replace('--', '.').substring(0, string.length - 1);
}

function to_words(string){
	return string.replace('-', ' ');
}

function print_domain_table_row(parent, domain, index){
	var classa, tr, name;
	if(index % 2 == 0){
		classa = 'even';
	}
	else{
		classa = 'odd';
	}
	tr = new Element('tr').addClassName(classa);
	name = new Element('th', {'style':'width:10em;'}).update(new Element('input', {'type':'button', 'value':domain.text, 'style':'width:100%;'}).observe('click', check_handler));
	tr.insert(name);
	tr.insert(new Element('td').update(domain.lastMonthSearchVolume));
	//tr.insert(new Element('td', {'id':to_std(domain.text, 'c')}).update("?"));
	tld_list.each(function(tld){
		tr.insert(new Element('td', {'id':to_std(domain.text + tld)}));
	});

	parent.insert(tr);
}

/**
 * Generate the table of domains.
 * @param String/Element parent
 */
function create_domain_table(parent){
	
	var parente = $(parent);
	//alert(parente);
	//console.debug(parent);
	var table = new Element('table', {'class':'table', 'id':'table'});
	var thead = new Element('thead');
	var tr = new Element('tr');
	var th = new Element('th');
	th.insert(new Element('input', {'type':'button', 'value':'ALL'}).observe('click', function(event){
		check_all();
	}));
	th.insert(new Element('input', {'type':'button', 'value':'UKs'}).observe('click', function(event){
		check_all_tld('.co.uk');
		check_all_tld('.org.uk');
		check_all_tld('.me.uk');
	}));
	tr.insert(th);
	tr.insert("<th><acronyn title=\"Last Month Search Volume\">LMSV</acronym></th>");
	//tr.insert("<th><input type=\"button\" value=\"CPC\" title=\"Average Cost Per Click (&pound;)\" onclick=\"get_cpc()\"></th>");
	tld_list.each(function(tld){
		var check_b = new Element('input', {'type':'button', 'value':tld}).observe('click', check_handler);
		tr.insert(new Element('th').insert(check_b));
	});
	//console.debug(tld_list);
	//alert(tld_list);
	thead.insert(tr);
	table.insert(thead);
	
	var tbody = new Element('tbody');
	table.insert(tbody);
	
	var name, eachtld = null;
	
	window.domain_list.each(function(domain, index){
		print_domain_table_row(tbody, domain, index);
	});

	//tbody.insert('<tr><th colspan="' + 2 + tld_list.length + '"><hr><p>Extended Keywords:</p></th></tr>');
	//window.domain_list.ext.each(function(domain, index){
	//	print_domain_table_row(tbody, domain, index);
	//});

	parente.update(table);
	
}

var requestQueue = new Array();

new PeriodicalExecuter(function(pe) {
	var domain = pop_from_queue();
	if(domain == null) return;
	check_domain_availability(domain);
}, 0.2);

function add_to_queue(domain){
	for(var i = 0; i < requestQueue.length; i++){
		requestQueue[i + 1] = requestQueue[i];
	}
	requestQueue[0] = domain;
}

function pop_from_queue(){
	if(requestQueue[0] == undefined) return null;
	var toreturn = requestQueue[0];
	for(var i = 1; i < requestQueue.length; i++){
		requestQueue[i - 1] = requestQueue[i];
	}
	return toreturn;
}

function check_domain_availability(domain){
	//console.debug(domain);
	new Ajax.Request("checkdomain.php?domain=" + domain, {
		method: 'get',
		//asynchronous: false,
		onSuccess: function(transport) {
			var callback = $(to_std(domain));
			if(transport.responseText == '1'){
				callback.update(new Element('input', {'type':'button', 'value':'+'}).observe('click', function(event){
					this.disabled = true;
					new Ajax.Request("ajax/addtobasket.php?domain=" + domain, {
						method: 'get',
						onSuccess: function(transport2){
							$('domain_basket').update(transport2.responseText);
							new Ajax.Request("ajax/addtobasket.php?count", {
								method: 'get',
								onSuccess: function(transport3){
									$('basket_count').update(transport3.responseText);
								}
							});
						}
					});
				}));
			}
			else{
				callback.update(new Element('span').addClassName('taken').update('X'));
			}
		}
	});
}


function check_all(){
	var check_f = function(domain){
		tld_list.each(function(tld){
			check_domain_availability(domain.text + tld);
		});
	};
	//console.debug(check_f);
	window.domain_list.each(check_f);
	//window.domain_list['ext'].each(check_f);
}


function check_all_tld(tld){
	var check_f = function(domain){
		 check_domain_availability(domain.text + tld);
	};

	window.domain_list.each(check_f);
	//window.domain_list['ext'].each(check_f);
}

function check_all_name(name){
	tld_list.each(function(tld){
		check_domain_availability(name + tld);
	});
}

function basket_remove(domain){
	new Ajax.Request("ajax/addtobasket.php?remove=" + domain, {
		method: 'get',
		onSuccess: function(transport){
			$('domain_basket').update(transport.responseText);
		}
	});
}

function basket_apply_code(code){
	new Ajax.Request("ajax/addtobasket.php", {
		method: 'post',
		parameters: {
			'offercode' : code
		},
		onSuccess: function(transport){
			$('domain_basket').update(transport.responseText);
		}
	});
}

function get_cpc(){
	var check_cpc = function(keyword, index){
		new Ajax.Request("ajax/googlecpc.php?keyword=" + keyword.text, {
			method: 'get',
			onSuccess: function(transport){
				$(to_std(keyword.text, 'c')).update('&pound;' + transport.responseText);
			}
		});
	};
	window.domain_list.each(check_cpc);
	//window.domain_list['ext'].each(check_cpc);
}
