
var WhoisRequestHandler = new Class({
	
	Implements: [Options],
	req: null,
	container: null,
	requestCount: 0,
	options: {
			requrl: '/tools/whoisRemote',
			container: 'whois_results',
			onResult : false
	},
	
	initialize: function(container, options) {
		if(container){
			this.container = container
		}else{
			this.container = this.options.container
		}
		this.container = $(this.container);
		
		this.setOptions(options);
		
		this.bindEvents = {
			success: this.requestSuccess.bind(this),
			fail:this.requestFail.bind(this),
			exception: this.requestException.bind(this)
		}
			
	},
	
	getParams: function(dnVal, tldVal){
		return 'dn=' + dnVal + '&tld=' + tldVal
	},
	
	addRequest: function(domainName, tld){
		if(this.requestCount == 0) this.startResults();
		var dn = domainName + tld;
		this.addResult(dn);		
		var params = this.getParams(domainName, tld)
		
		new Request.JSON({
			url: this.options.requrl,
			onSuccess: this.bindEvents.success,
			onFail: this.bindEvents.fail,			
			onException: this.bindEvents.exception}).send(params);
		
		this.requestCount++;
	},
	
	startResults: function(){
		//show header
		var row = new Element('div', {'class': 'row'}).adopt(
			new Element('div', {'html': 'Domain Name', 'class':'name header'}),
			new Element('div', {'html': 'Available', 'class':'action header'}),
			new Element('div',{'html': 'Results','class':'output header'})
		);
		row.inject(this.container);
		this.container.addClass('show');
	},	
	
	requestSuccess: function(jsonObj) {
//		alert('requestSuccess'+jsonObj);
		if(!jsonObj)return;
		//get domain name
		if(!jsonObj.results[0])return;
		var dn = jsonObj.results[0].dn;
		if(dn){
			this.updateResult(jsonObj.results, this.container);
			// call optional onResult function
			if(this.options.onResult){
				this.options.onResult(dn);
			}
		}
	},
	
	requestFail: function(){
//		alert('requestFail:');
	},
	
	requestException: function(){
//		alert('requestException');
	},
	
	addResult: function(domainName){
		var row = $(domainName);
		var newRow = (!row);
		if(newRow){
			row = new Element('div', {'id':domainName,'class': 'row'})
		}else{
			row.empty();
		}
		new Element('div', {'html': domainName, 'class':'name'}).inject(row);
		new Element('div', {'html':'-','class':'action'}).inject(row);		
		new Element('div',{'html':'<img src="/images/loaders/whois-result-loader2.gif" border="0"/>','class':'output'}).inject(row);		
		if(newRow) row.inject(this.container);
	},
	
	updateResult: function(results, container){		
		results.each(function(result){			
			var row = container.getElementById(result.dn);
			if(row){
				row.getElement('div.action').set('html', result.av);
				var op = row.getElement('div.output');
				op.empty();
				var res = new Element('div', {'id': result.dn + '_res', 'class': 'results'});
				new Element('h2', {'html': 'Results for: ' + result.dn}).inject(res);
				new Element('pre',{'text': result.op}).inject(res);
				res.inject(op);
				new Element('a', {'html': 'View search details', 'href': '#', 'class': 'detailslink', 'rel':'smoodal;element[' + result.dn + '_res]'}).inject(op);
				if(result.av.toLowerCase()=='no') 
				var a = new Element('a', {'href':'http://www.'+result.dn, 'target':'_blank', 'html':'Try web site', 'class': 'link', 'title':'Try web site at www.'+result.dn}).inject(op);
				op.inject(row);
				if(result.av.toLowerCase()=='yes')row.addClass('hi');
			}
			else
			{
//				alert('row not found:'+result.dn);
			}
		});
	},
	
	clearResults: function(){
		this.container.removeClass('show').empty();
		this.requestCount = 0;
	}
	
});
