var lastInput = new Date().getTime();
var current = false;
var list = Array();
var hasFocus = false;
var noTab = false;
var currentError = false;
var cats = 0;
var ajaxStart = false;

var hwCallback = {
	search: function(result) {
	
		list = Array();
		if (result == false) {
			Element.update('autocomplete_choices','');

			Element.hide('autocomplete_choices');
			return;
		}
		var html = '';
		var x = 0;

		for(var i in result) {
			x++;
			list[x] = i;
			
			html += '<div id="div' + i + '"><a id="cat' + i + '" onclick="setCatId(' + i + ')">' + result[i] + '</a></div>';

			if (x == 10) {
				html += '<option>Keep typing for more categories</option>';
				break;
			}
		}
		
		Element.update('autocomplete_choices',html);
		if(x==1 && result[i].replace(/(<([^>]+)>)/ig,"").toLowerCase()==document.askFrm.cat_name.value.toLowerCase()){
			setCatId(i);
			return;
		}
		
		Element.show('autocomplete_choices');
	}
}

function highlight(up){
	var len = list.length;
	var stop = false;
	
	if(!current){
		current = (!up)?len:0;
	}
	if($('div'+list[current]))
		$('div'+list[current]).className = '';	
	
	current = (!up)?(current-1):(current+1);
	if(current>=len)
		current = 1;
	else if(current<1)
		current = len;
		
	setCurrent(list[current]);

	return;
}

function setCurrent(current){
	if($('div'+current)){
		$('div'+current).className = 'hover';
	}
}

function searchRequest(keywords)
{
	if(keywords.length>=2){
		remoteHW.search(keywords.replace(/^\s*/, '').replace(/\s*$/, ''));
	}else
	Element.hide('autocomplete_choices');
}

function checkQuestionBeforeOther(submitting)
{
	submitting = submitting || false;
	if (document.askFrm.cat_id.value > 0 && $('zip').value.length == 5) {
		return true;
	}
	else {
		alert('Please choose a specialty and zip code before '+(!submitting?'typing':'submitting')+' your question.');
		return false;
	}
}

function clearQuestionField(){
	if(!changed){
		$('question').value = '';
		$('question').removeClassName('grey');		
	}
	changed = true;
}

function showCat()
{

	if($('tips').style.display=='none' && document.askFrm.zip.value!='' && document.askFrm.cat_name.value!=''){
		var pos = Position.cumulativeOffset($('question'));
		new Effect.Move('tips',
			{mode: 'absolute', x: pos[0], y: pos[1] -  $('tips').getHeight(),duration: 0.0 }
		);
		showTips(true);
	}
}

function setCatId(id) {
	var div = $('cat'+id);
	document.askFrm.cat_id.value = parseInt(id);
	document.askFrm.cat_name.value = div.innerHTML.replace(/(<([^>]+)>)/ig,"").unescapeHTML();

	Element.hide('autocomplete_choices');
	
	setTipText(id);
	$('autocomplete').focus();
	
}

function setTipText(id){
	var url = 'ajax.ask.php';
	var params = 'action=catInfo&cat_id='+id;
	var ajax = new Ajax.Updater(
	'tips_tip',
	url,
	{	method: 'get', parameters: params, evalScripts: true,
		onComplete: updateZip
	});
}

function setSelectionId(text, li, menu_id) {
	document.askFrm.cat_id.value = (menu_id)?menu_id:li.id;

	if(menu_id){
		document.askFrm.cat_name.value = text;
		new Effect.Fade('category_menu');
		if(navigator.appName=='Microsoft Internet Explorer')
			$('radius').show();
	}

	var url = 'ajax.ask.php';
	var params = 'action=catInfo&cat_id='+((menu_id)?menu_id:li.id);
	var ajax = new Ajax.Updater(
	'tips_tip',
	url,
	{	method: 'get', parameters: params, evalScripts: true,
		onComplete: updateZip
	});
	$('autocomplete').focus();
}

function updateZip() {

	var cat_id = document.askFrm.cat_id.value;
	var zip = document.askFrm.zip.value;
	var cat = document.askFrm.cat_name.value;
	var radius = document.askFrm.radius.value;//document.askFrm.radius.options[document.askFrm.radius.selectedIndex].value;
	
	
	if (cat.length > 0 && zip.length == 5) {

		lastCheckChanged = (cat_id!=lastCheck[0] || zip!=lastCheck[1] || radius!=lastCheck[2]);
		
		if(lastCheckChanged){
			new Effect.Appear('wait_dlg',{duration: 0.4});
			$('question').readOnly = true;		
		}
		
		var url = 'ajax.ask.php';
		var params = 'action=zipInfo&zip='+zip+'&cat='+escape(cat);
		var ajax = new Ajax.Updater(
		'tooltip_body',
		url,
		{
			method: 'get', parameters: params, onComplete:checkForService
		});
	}
}

function checkForService() {
	var cat_id = document.askFrm.cat_id.value;
	var cat = document.askFrm.cat_name.value;
	var zip = document.askFrm.zip.value;
	var radius = document.askFrm.radius.value;//document.askFrm.radius.options[document.askFrm.radius.selectedIndex].value;
	
	if (cat_id > 0 && zip.length == 5) {
		var url = 'ajax.ask.php';
		var params = 'action=checkService&cat_id='+cat_id+'&zip='+zip+'&radius='+radius;
		var ajax = new Ajax.Request(
		url,
		{method: 'get', parameters: params, onSuccess:serviceCheckReceived});
	}else{
		new Effect.Fade('wait_dlg',{duration: 0.4});
		$('autocomplete').focus();
		alert('Please select a valid speciality.');
		
	}
}

var lastCheck = [0,0,0];
var lastCheckChanged = true;

function serviceCheckReceived(t)
{
	lastCheck = [
		document.askFrm.cat_id.value,
		document.askFrm.zip.value,
		document.askFrm.radius.value//document.askFrm.radius.options[document.askFrm.radius.selectedIndex].value
	];	
	new Effect.Fade('wait_dlg',
		{
			duration: 0.4, delay: (lastCheckChanged)?1.0:0.0,
			afterFinish: function(){
				$('question').readOnly = false;
				if(t.responseText==''){
					currentError = false;
					
					if( $('question').value == '' )
					{
						document.askFrm.question.value = 'Type your question here';
						document.askFrm.question.addClassName('grey');
						changed = false;
					}
						$('question').focus();
					if(hasFocus){
						showCat();
					}
				}else{
					$('zip').focus();
					noTab = true;
					currentError = t.responseText;
					alert(t.responseText);
				}				
			}
		});		
}

var currentZip = 0;

function showCats(obj){
	var newx = findPosX(obj);
	var newy = findPosY(obj);

	newx = (newx-120);
	newy = (newy+30);

	displayDialog('category_menu');
}

function checkQuestionFld(){
	var ret;

	if(!changed || document.askFrm.question.value==''){
		alert('Please enter a question.');
		ret = false;
	}else{
		ret = true;
	}
	return ret;
}

function checkCat(text){
	if(text.length==0 || document.askFrm.cat_id.value==0){
		Element.hide('autocomplete_choices',{delay: 0.5});
	}
}

function checkAreaCode(text){
	if(text.value.length==4 && text.value.charAt(0)=="1")
	text.value = text.value.substring(1);
}

function setFocus(focus){
	hasFocus = focus;
}

function showTips(show){
	if(document.askFrm.cat_id.value > 0){
		if(show){
			if(navigator.appName=='Microsoft Internet Explorer')
				$('radius').hide();
				$('tips_link').hide();
				
			$('tips').show();
		}else{
			if(navigator.appName=='Microsoft Internet Explorer')
				$('radius').show();
							
			$('tips').hide();
		}
	}
}

function doSubmitRegister(){
	$('new_user').value = 1;
	if (checkQuestion(document.askFrm.question.value)){
		document.forms[1].submit();
		return true;
	}
}

/*fire up the observers, etc*/
window.onload = function() {
	Event.observe('autocomplete','keyup',
		function(event){
			var evt = (event.which||event.keyCode);
			if(evt==Event.KEY_ESC){
				Element.hide('autocomplete_choices');
				$('autocomplete').value = '';
			}else if(evt==Event.KEY_DOWN){
				highlight(true);
				//Event.stop();
			}else if(evt==Event.KEY_UP){
				highlight(false);
				//Event.stop();
			}else if(evt==Event.KEY_RETURN){
				//Event.stop();
			}
		}
	);
	
	Event.observe('body','keyup',
		function(event){
			if(hasFocus)
			 return event;
			evt = (event.which||event.keyCode);
			if(evt==Event.KEY_ESC){
				new Effect.Fade('category_menu');
			}else if(evt==Event.KEY_RETURN){
				if(noTab){
					noTab = false;
					return event;				
				}
				setCatId(list[current]);
			}
		}
	);
	
	new Form.Element.DelayedObserver(
		'autocomplete',
		0.15,
		function(el, value){
			document.askFrm.cat_id.value = 0;
			searchRequest(value);
		}
	);	
	new Draggable('category_menu');
	
	$('wait_dlg').setStyle({
		marginLeft: ($('question').getWidth() - $('wait_dlg').getWidth())/2 + 'px',
		marginTop: ($('question').getHeight() - $('wait_dlg').getHeight())/2 + 'px'
	});
}

function checkQuestion(txt){
	if(currentError){
		alert(currentError);
		return false;
	}
	
	if (checkQuestionBeforeOther(true) ){
		if(txt.length==0 || txt=='Type your question here'){
			alert('Please enter a question.');
			return false;
		}else if(txt.length < 100){
			displayDialog('question_box');
			return false;
			//return confirm('Your question is very short.  Detailed questions get better answers.\r\n\r\nClick Cancel to edit your question or OK to submit it anyway.');
		}else{
			return true;
		}
	}else{
		return false;
	}
}

function ignoreEnter(e){
	var e=(typeof event!='undefined')?window.event:e; // IE : Moz
	if(e.keyCode==13) return false; 
	else return e; 
}

function checkZip(event){
	if(event.keyCode != 13 && $('zip').value.length == 5 && $('question').value.length > 0){
		updateZip();
	}
}
