ABN=Class.create({
	initialize: function()
	    {
		this.opened='a_t_abn';
		this.results=null;//holds the last searchByName query's results
		this.query=null;//last searchByName query
	    },
	accordion:function(el)
		{
		if($(el.id.replace('a_t','d')).visible())
			{
			new Effect.SlideUp(el.id.replace('a_t','d'));
			$(this.opened).className='a_t';
			}
		else
			{
			if(this.opened==el.id)
				{
				new Effect.SlideDown(el.id.replace('a_t','d'));
				$(this.opened).className='a_t_a';
				}
			else
				{
				new Effect.Parallel(
			        [
		            new Effect.BlindUp($(this.opened.replace('a_t','d'))),
		            new Effect.BlindDown($(el.id.replace('a_t','d')))
			        ], {duration: 0.7});
			    $(this.opened).className='a_t';
			    this.opened=el.id;
			    $(el.id).className='a_t_a';
				}
			}
		},
	search:function(what,id)
		{
		var pars = 'uid='+Math.random();
		switch(what)
			{
			case 'abn':
				//remove the spaces and unnecessary chars
				if(id)
				    {
					var abn=id;
				    }
				else
				    {
	                var abn=$F('ABN_i').replace(new RegExp('[^0-9]*','g'),'');
				    }
				if(abn.length!=11)
					{
					alert('The ABN you have entered is Invalid!');
					return;
					}
				else
					{
					pars=pars+'&abn='+abn;
					}
			break;
			case 'acn':
				//remove the spaces and unnecessary chars
				var acn=$F('ACN_i').replace(new RegExp('[^0-9]*','g'),'');
				pars=pars+'&acn='+acn;
			break;
			case 'abn2':
				//abn search using ABN's returned by  searchByName()
				pars=pars+'&abn='+id;
			break;
			}
		var url = baseHREF+"/ajax/lookup.php";
		//alert(url);
		var myAjax = new Ajax.Request(url,{method: 'post',parameters: pars,requestHeaders: {Accept: 'application/json'},
			onCreate:function()
				{
				$('error','business','disclaimer').invoke('hide');
				$('working').show();
				},
			onComplete: function(transport){
				$('working').hide();
				var result = transport.responseText.evalJSON();
				//alert(transport.responseText);
				if(result.status==0)
					{
					//result received
                    var txt='';
					if($F('c_name_i').length>4)
					    {
						txt+='<a href="javascript:;" onclick="ABN.searchByName()">Back to search results</a><br />';
					    }
					txt+='<h2 class="a_t_a_n"><b>ABN</b> : '+result.business.general.ABN;
					if(result.business.general.ACN!='')
					    {
						txt+=', <b>ACN</b> : '+result.business.general.ACN;
					    }
					txt+='</h2>';
					if(typeof result.business.names !='undefined')
					    {
						txt+='<b>Entity Name</b> : <b>'+result.business.names[0].name+'</b><br />';
					    }
                    else if(typeof result.business.trading !='undefined')
					    {
						txt+='<b>Entity Name</b> : <b>'+result.business.trading[0].name+'</b><br />';
					    }
					txt+='<b>Entity Type</b> : '+result.business.general.description+'<br />';
					txt+='<b>Last Updated</b> : '+result.business.general.last_updated+'<br />';
	 				txt+='<br /><table cellspacing="2" cellpadding="2" class="table" width="95%"><tr class="head" id="status_head"><td>ABN Status</td><td>From</td><td>To</td></tr>';
	 				result.business.statuses.each(function(st){
	 					txt+='<tr><td>'+st.code+'</td><td>'+st.from+'</td><td>'+ABN.nice_to(st.to)+'</td></tr>';
	 				});
	 				txt+='</table>';
	 				if(typeof result.business.names !='undefined')
	 					{
	 					txt+='<br /><table cellspacing="2" cellpadding="2" class="table" width="95%"><tr class="head"><td>Entity names</td><td>From</td><td>To</td></tr>';
	 					result.business.names.each(function(n){
	 					txt+='<tr><td>'+n.name+'</td><td>'+n.from+'</td><td>'+ABN.nice_to(n.to)+'</td></tr>';

	 					});
	 					txt+='</table>';
	 					}
	 				if(typeof result.business.trading !='undefined')
	 					{
	 					txt+='<br /><table cellspacing="2" cellpadding="2" class="table" width="95%"><tr class="head"><td>Trading names</td><td>From</td><td>To</td></tr>';
	 					result.business.trading.each(function(n){
	 						txt+='<tr><td>'+n.name+'</td><td>'+n.from+'</td><td>'+ABN.nice_to(n.to)+'</td></tr>';

	 					});
	 					txt+='</table>';
	 					}
	 				txt+='<br /><table cellspacing="2" cellpadding="2" class="table" width="95%"><tr class="head"><td>Address</td><td>From</td><td>To</td></tr>';
	 					result.business.address.each(function(a){
	 					txt+='<tr><td>'+a.postal_code+' '+a.state+'</td><td>'+a.from+'</td><td>'+ABN.nice_to(a.to)+'</td></tr>';

	 				});
	 				txt+='</table><br /><b>Permalink</b>: <a class="permalink" href="'+baseHREF+'/'+result.business.general.ABN+'">'+baseHREF+'/'+result.business.general.ABN+'</a><br />';
					$('business').show().update(txt);
					$('status_head').className=result.business.statuses[0].code.toLowerCase();
					$('disclaimer').show();
					}
				else
					{
					//some error occured
					$('error').show().update(result.error);
					}
			}});
		},
	searchByName:function()
		{
		var pars = '';
		if($F('c_name_i').length<3)
			{
			alert('Please enter at least 4 characters');
			return;
			}
		pars=pars+'&name='+$F('c_name_i')+'&exact='+$F('c_rel')+'&states='+$F('c_states');
		if(this.query==pars)
		    {
			//use the cached results
			this.showResults();
		    }
		else
		    {
    		var url = baseHREF+"/ajax/lookupByName.php";
			var myAjax = new Ajax.Request(url,{method: 'post',parameters: pars,requestHeaders: {Accept: 'application/json'},
				onCreate:function()
					{
					$('error','business','disclaimer').invoke('hide');
					$('working').show();
					},
				onComplete: function(transport)
					{
					$('working').hide();
					var result = transport.responseText.evalJSON();
					this.query=pars;
					this.results=result;
                    ABN.showResults();
					}.bind(this)
				});
		    }
		},
	showResults:function()
	    {
		/**
		/* Show the results of a Search By Name request
		*/
		var txt='';
		if(this.results.status==0)
			{
			txt+='<br /><table cellspacing="2" cellpadding="2" class="table" width="95%"><tr class="head"><td>ABN</td><td width="60%">Company name</td><td>Address</td></tr>';
			this.results.businesses.each(function(n){
			txt+='<tr><td class="'+n.status.toLowerCase()+'"><a href="javascript:;" onclick="ABN.search(\'abn\',\''+n.ABN+'\');">'+n.ABN+'</a></td><td>'+n.company+'</td><td>';
			if(n.postCode!=''&&n.postCode!='0000'&&n.stateCode!='')
			    {
                txt+=n.postCode+', '+n.stateCode;
			    }
			else if(n.stateCode!='')
			    {
                txt+=n.stateCode;
			    }
			txt+='</td></tr>';
			});
			txt+='</table>';
			$('business').show().update(txt);
			$('disclaimer').show();
			}
		else
			{
			//some error occured
			$('error').show().update(this.results.error);
			}
	    },
   GST:function(type)
        {
        var txt='<table cellspacing="1" cellpadding="4" class="table" width="55%"><tr class="head"><td colspan="2">Amount <b>';
        if(isNaN($F('GST_amount')))
            {
			alert('Please check the amount!');
			return;
            }
		var amount=new Number($F('GST_amount'));
		switch(type)
		    {
			case '+':
			    txt         +='<u>before</u></b> GST';
			    var gst      = new Number(amount * 0.1);
				var total    = new Number(amount * 1.1);
				var subtotal =amount;
			break;
			case '-':
			    txt          +='<u>after</u></b> GST';
			    var gst      = new Number(amount / 11);
				var subtotal = new Number(amount - gst);
				var total    = amount;
			break;
		    }
		txt+='</td></tr>';
		txt+='<tr><td width="40%" style="text-align:right"><b>Subtotal</b></td><td><div class="amount">'+subtotal.toFixed(2)+'</div></td</tr>';
		txt+='<tr><td style="text-align:right"><b>GST</b></td><td><div class="amount">'+gst.toFixed(2)+'</div></td</tr>';
		txt+='<tr><td style="text-align:right"><b>Total</b></td><td><div class="amount">'+total.toFixed(2)+'</div></td</tr>';
		txt+='</table><br />';
		$('output').hide().update(txt);
		Effect.toggle('output','appear');
        },
	nice_to:function(to)
		{
		//show a nicer date
		if(to==''||to=='0001-01-01'||to=='0000-00-00')
			{
			to='<b>Current</b>';
			}
		return to;
		},
	addSearch:function()
	    {
		/**
		/* Add or site as a custom search engine
		*/
		window.external.AddSearchProvider("http://abn.commerce.com.au/outside-search.xml");
	    }
});
document.observe("dom:loaded", function () {
	ABN=new ABN();
	$$('h2.a_t').each(function(a){
		$(a.id).onclick=function(){ABN.accordion(a);};
	});
	if($('a_t_abn'))
        {
       	$('a_t_abn').className='a_t_a';
		if($F('ABN_i').length>0)
			{
			ABN.search('abn');
			}
		else if($F('ACN_i').length>0)
			{
			ABN.accordion($('d_acn'));
			$('a_t_acn').className='a_t_a';
			ABN.search('acn');
			}
		if($F('c_name_i').length>0)
			{
			ABN.accordion($('d_c'));
			$('a_t_c').className='a_t_a';
			ABN.searchByName();
			}
        }
    if(typeof window.external == "object" && typeof window.external.AddSearchProvider != "undefined" )
		{
		$('addSearch').show();
		}
});