jQuery(document).ready(function(){
	initialize_search(search_params);
});

jQuery.defineTag = function( tag ) {
	jQuery[tag.toUpperCase()] = function() {
		return jQuery._createNode( tag, arguments );
	}
};

(function() {
	var tags = [
		'a', 'br', 'button', 'canvas', 'div', 'fieldset', 'form',
		'h1', 'h2', 'h3', 'hr', 'img', 'input', 'label', 'legend',
		'li', 'ol', 'optgroup', 'option', 'p', 'pre', 'select',
		'span', 'strong', 'table', 'tbody', 'td', 'textarea',
		'tfoot', 'th', 'thead', 'tr', 'tt', 'ul' ];
	for( var i = tags.length - 1;  i >= 0;  i-- ) {
		jQuery.defineTag( tags[i] );
	}
})();

jQuery.NBSP = '\u00a0';

jQuery._createNode = function( tag, args ) {
	//var fix = { 'class':'className', 'Class':'className' };
	
	var fix = {};
	var e;
	try {
		var attrs = args[0] || {};
		e = document.createElement( tag );
		for( var attr in attrs ) {
			var a = fix[attr] || attr;
			e[a] = attrs[attr];
		}
		for( var i = 1;  i < (args.length);  i++ ) {
			var arg = args[i];
			alert(arg)
			if( arg == null ) continue;
			if( arg.constructor != Array ) append( arg );
			else for( var j = 0;  j < arg.length;  j++ )
				append( arg[j] );
		}
	}
	catch( ex ) {
		alert( 'Cannot create <' + tag + '> element:\n' +
			args.toSource() + '\n' + args );
		e = null;
	}
	
	function append( arg ) {
		if( arg == null ) return;
		var c = arg.constructor;
		switch( typeof arg ) {
			case 'number': arg = '' + arg;  // fall through
			case 'string': arg = document.createTextNode( arg );
		}
		e.appendChild( arg );
	}
	
	return e;
};


var search_params = {"region_id":"","district_id":"","suburb_id":""};

function Node(id, label) 
{
	this.id 		= id;
	this.label 		= label;
	this.children 	= [];
}

function deleteChildNodes(parent) 
{
	if(parent == undefined || parent == null) return;
	while (parent.firstChild) parent.removeChild (parent.firstChild);
}

function nodeSelectBox(nodes, element_id, selected_id, all_text, disabled) 
{
	var element = document.getElementById(element_id);

	if(element) {

		var select = jQuery.SELECT({id: element_id, name: element_id});
		var child_nodes = [];
		
		var allAreas = '';
		for (var i = 0; i < nodes.length; i++) {
			if (i > 0){
				allAreas = allAreas + ",";
			}
			allAreas = allAreas + nodes[i].id;
		}
		if (((element_id == 'suburb_id')&&(nodes.length == 0))||(element_id != 'suburb_id')){
			select.appendChild (jQuery.OPTION({
				text: all_text,
				innerText: all_text,
				value: allAreas,
				selected: !selected_id
			}));
		}

		for (var i = 0; i < nodes.length; i++) {

			var selected = (selected_id && nodes[i].id == selected_id);

			if (selected)
				child_nodes = nodes[i].children;

			select.appendChild (jQuery.OPTION({
				text: nodes[i].label,
				innerText: nodes[i].label,
				value: nodes[i].id,
				selected: selected
			}));

		}

		if (disabled)
			select.disabled = true;

		element.parentNode.replaceChild (select, element);
		if(jQuery("#temp_suburb_entry").attr("id") == 'temp_suburb_entry' && element_id == "suburb_id"){
			//alert(jQuery("#temp_suburb_entry").attr("id"));
			
			select.onchange = function(){ 
				if((jQuery(this).val()+'').length > 0){
					jQuery("#temp_suburb_entry").attr("style", "display: block");
				}
				if((jQuery(this).val()+'').length <= 0){
					jQuery("#temp_suburb_entry").attr("style", "display: none");
				}
			};
		}
		if (element_id == 'suburb_id'){
			jQuery('#suburb_id').attr({ size: '4' });
			jQuery('#suburb_id').attr({ multiple: 'true' });
			jQuery('#suburb_id').attr({ onChange: 'checkSubs(document.searchForm.suburb_id.options,true)' });
		}
		document.getElementById('suburb_id').selectedIndex = -1; 
		
		return child_nodes;

	}
	return false;
}

/** Search ******************************************/

function checkSubs(form,option){
	if (document.searchForm.surRad){
		checkSuburbs(form,option);
	}
}

function changeRegion () 
{
	var districts 	= [];
	var region 			= document.getElementById('region_id');
	var region_id 		= region.options[region.selectedIndex].value;


	for (var i = 0; i < regions.length; i++) {
		if (regions[i].id == region_id) districts = regions[i].children;
	}

	nodeSelectBox(districts, 'district_id', false, 'All districts', !region_id);
	jQuery("#district_id").change(changeDistrict);

	nodeSelectBox ([], 'suburb_id', false, 'All suburbs', true);
	
	if (document.searchForm.surRad){
		document.searchForm.surRad.checked = false;
	}
}

function changeDistrict () 
{
	var suburbs 		= [];
	var district_id 	= this.options[this.selectedIndex].value;
	var region 			= document.getElementById('region_id');
	var region_id 		= region.options[region.selectedIndex].value;

	for(var i = 0; i < regions.length; i++) {

		if (regions[i].id == region_id) {

			for (var j = 0; j < regions[i].children.length; j++) {
				if (regions[i].children[j].id == district_id) suburbs = regions[i].children[j].children;
			}

		}

	}
	nodeSelectBox (suburbs, 'suburb_id', false, 'All suburbs', !district_id);
}

function initialize_search(params) {

	var districts = nodeSelectBox(regions, 'region_id', params.region_id, 'Please select a Region', false);
	jQuery("#region_id").change(changeRegion);

	var suburbs = nodeSelectBox(districts, 'district_id', params.district_id, 'All districts', !params.region_id);
	jQuery("#district_id").change(changeDistrict);

	nodeSelectBox (suburbs, 'suburb_id', params.suburb_id, 'All suburbs', (!params.region_id || !params.district_id));
	
	

}



