// suggest cities functionality -- //
function getCaretInfo(element_id) {
    var oTextarea = document.getElementById(element_id);
	var docObj = oTextarea.ownerDocument;
	var result = {start:0, end:0, caret:0};
	
	if (navigator.appVersion.indexOf("MSIE")!=-1) {
		if (oTextarea.tagName.toLowerCase() == "textarea") {
			if (oTextarea.value.charCodeAt(oTextarea.value.length-1) < 14) {
				oTextarea.value=oTextarea.value.replace(/34/g,'')+String.fromCharCode(28);
			}
			var oRng = docObj.selection.createRange();
			var oRng2 = oRng.duplicate();
			oRng2.moveToElementText(oTextarea);
			oRng2.setEndPoint('StartToEnd', oRng);
			result.end = oTextarea.value.length-oRng2.text.length;
			oRng2.setEndPoint('StartToStart', oRng);
			result.start = oTextarea.value.length-oRng2.text.length; 
			result.caret = result.end;
			if (oTextarea.value.substr(oTextarea.value.length-1) == String.fromCharCode(28)) {
				oTextarea.value = oTextarea.value.substr(0, oTextarea.value.length-1);
			}			
		} else {
			var range = docObj.selection.createRange();
			var r2 = range.duplicate();			
			result.start = 0 - r2.moveStart('character', -100000);
			result.end = result.start + range.text.length;	
			result.caret = result.end;
		}			
	} else {
		result.start = oTextarea.selectionStart;
    	result.end = oTextarea.selectionEnd;
		result.caret = result.end;
	}
	/*if (result.start < 0) {
		result = {start:0, end:0, caret:0};
	}*/
	return result;
}

iSaggCity = 0;
SuggCitiesCount = 0;

function searchSuggestCities(input_id, div_id, event, states_input_id) 
{
    if (event){
        if (event.keyCode == 27) {
            closeSuggestCitiesDiv(div_id);
            return false;
        }
    	if (event.keyCode == 40){
    		if (iSaggCity < SuggCitiesCount) iSaggCity = iSaggCity + 1;
    		$("#divst"+iSaggCity).removeClass("suggest_cities_link");
    		$("#divst"+iSaggCity).addClass("suggest_cities_link_over");
    		if (iSaggCity > 1) {
    		    document.getElementById("divst"+(iSaggCity-1)).className = 'suggest_cities_link';   
    		}
    		return false; 		
    	}else if (event.keyCode == 38){
    		if (iSaggCity > 1) iSaggCity = iSaggCity - 1;
    		$("#divst"+iSaggCity).removeClass("suggest_cities_link");
    		$("#divst"+iSaggCity).addClass("suggest_cities_link_over");
    		if (iSaggCity < SuggCitiesCount) document.getElementById("divst"+(iSaggCity+1)).className = 'suggest_cities_link';
    		return false;
    	}else if (event.keyCode == 13){
    	    if (!$('#divst'+iSaggCity).html()) return false;
    		chooseSuggestCity(input_id, div_id, document.getElementById("divst"+iSaggCity).innerHTML);
    		return false;
    	}
    }
    caret_pos = getCaretInfo(input_id);
    if (caret_pos.start >= 0) {
        if (caret_pos.start != caret_pos.end || caret_pos.start != caret_pos.caret) {
            closeSuggestCitiesDiv(div_id);
            return false;
        }
        if (caret_pos.caret != document.getElementById(input_id).value.length) {
            closeSuggestCitiesDiv(div_id);
            return false;
        }
    }
    var text = $("#"+input_id).val();
    var state = '';
    if (states_input_id) state = $("#"+states_input_id).val();
    
    $.ajax({type: 'POST',
            dataType: 'json',
            url: HTTP_PATH+'suggest_cities.php?t=' + Math.random(),
            data: 'city='+text+'&state='+state,
            success: function(jsonElem) {
                    if (!jsonElem.ok || !jsonElem.cities) {
                        closeSuggestCitiesDiv();
                    } else {
                        $("#"+div_id).empty();
                        SuggCitiesCount = jsonElem.cities.length;
                        for(var i=0;i<jsonElem.cities.length;i++){
                            $("#"+div_id).append('<div id="divst'+(i+1)+'" onmouseover="javascript:suggestCitiesOver(this);" onmouseout="javascript:suggestCitiesOut(this);" onclick="javascript:chooseSuggestCity(\'' + input_id + '\', \'' + div_id + '\', this.innerHTML);" class="suggest_cities_link">' + jsonElem.cities[i] + '</div>');
                        }
                        $("#"+div_id).css({ display: "inline" });
       
                    }
                }
            });
    return false;
}

function checkCityEnter(event)
{
	if (event.keyCode == 13) {
	    if ($('#divst'+iSaggCity).html()) {
	        return false;
	    }
	    return 13;
	}
	return true;
}
//Mouse over function
function suggestCitiesOver(div_value) {
	div_value.className = 'suggest_cities_link_over';
}
//Mouse out function
function suggestCitiesOut(div_value) {
	div_value.className = 'suggest_cities_link';
}
//Click function
function chooseSuggestCity(input_id, div_id, city) {
	var text = $("#"+input_id).val();
	
	// last comma position:
	/*var pos = text.lastIndexOf(',');
    if (pos >= 0) {
        text = text.substring(0, pos+1) + ' ';
    } else text = '';
    if (text.length) city = city;
    
	$("#"+input_id).val(text + city);*/
	$("#"+input_id).val(city);
	closeSuggestCitiesDiv(div_id);
	document.getElementById(input_id).focus();
}
function closeSuggestCitiesDiv(div_id) {
	iSaggCity = 0;
	SuggCitiesCount = 0;
    $("#"+div_id).empty();
    $("#"+div_id).css({ display: "none" });
}