var browser = navigator.userAgent.toLowerCase();
var IE = browser.indexOf("msie") != -1;
var Opera = browser.indexOf("opera") != -1;
var Safari = browser.indexOf("safari") != -1;

// returns the object of an html element
var bObject = function(a){
    if(document.all && !document.getElementById) {
        return document.all[a];
    }else{
        return document.getElementById(a);
    }
}

function trim(str){
  return str.replace(/^\s*|\s*$/g,"");
}

//Finds the absolute X position (integer value) of a object on screen. The agrgument to be passed is elements id.
//This function is absolutely independent of the style.position attribute of the element.
function posX(element){
	try{
		var obj=bObject(element);
		var curleft = 0;
		if (obj.offsetParent){
			while (obj.offsetParent){
				curleft += obj.offsetLeft;
				obj = obj.offsetParent;
			}
		}else if (obj.x){
			curleft += obj.x;
		}
		return curleft;
	}catch(e){}
}

//Finds the absolute Y position (integer value) of a object on screen. The agrgument to be passed is elements id.
//This function is absolutely independent of the style.position attribute of the element.
function posY(element){
	try{var obj=bObject(element);
		var curtop = 0;
		if (obj.offsetParent){
			while (obj.offsetParent){
				curtop += obj.offsetTop;
				obj = obj.offsetParent;
			}
		}else if (obj.y){
			curtop += obj.y;
		}
		return curtop;
	}catch(e){}
}


//var locations = new Array("4 Bungalows","7 Bungalows","Airoli (E)","Airoli (W)","Ambarnath (E)","Ambarnath (W)","Andheri (E)","Andheri (W)","Badlapur (E)","Badlapur (W)","Bandra (E)","Bandra (W)","Bandstand","Bhandup (E)","Bhandup (W)","Bhayandar (E)","Bhayandar (W)","Bhendi Bazaar","Bhiwandi","Borivali (E)","Borivali (W)","Breach Candy","Byculla (E)","Byculla (W)","CBD-Belapur (E)","CBD-Belapur (W)","Carter Road","Chakala","Charni Road","Chembur (E)","Chembur (W)","Chinchpokli (E)","Chinchpokli (W)","Chowpatty","Churchgate","Colaba","Cotton Green","Crawford Market","Cuffe Parade","Dadar (E)","Dadar (W)","Dahanu (E)","Dahanu (W)","Dahisar (E)","Dahisar (W)","Dhobi Talao","Diwa (E)","Diwa (W)","Dombivli (E)","Dombivli (W)","Dongri","Dronagiri (E)","Dronagiri (W)","Elphinstone Road","Fort","Gamdevi","Ghansoli (E)","Ghansoli (W)","Ghatkopar (E)","Ghatkopar (W)","Girgaum","Goregaon (E)","Goregaon (W)","Grant Road","Gulmohar Road","Haji Ali","Hill Road","Irla","Jogeshwari (E)","Jogeshwari (W)","Juhu","Kalamboli (E)","Kalamboli (W)","Kalbadevi","Kalwa (E)","Kalwa (W)","Kalyan (E)","Kalyan (W)","Kandivali (E)","Kandivali (W)","Kanjurmarg (E)","Kanjurmarg (W)","Kemps Corner","Khar (E)","Khar (W)","Kharghar (E)","Kharghar (W)","Kopar Khairane (E)","Kopar Khairane (W)","Kurla (E)","Kurla (W)","Linking Road","Lokhandwala","Lower Parel","Mahalaxmi","Mahim","Mahim (E)","Mahim (W)","Malad (E)","Malad (W)","Marine Drive","Marine Lines","Marol","Matunga","Matunga (E)","Matunga (W)","Mazagaon","Mira Road (E)","Mira Road (W)","Mohammed Ali Road","Mulund (E)","Mulund (W)","Mumbai","Mumbai Central","Mumbra (E)","Mumbra (W)","Naigaon (E)","Naigaon (W)","Nala Sopara (E)","Nala Sopara (W)","Napean Sea Road","Nariman Point","Navi Mumbai","Nerul (E)","Nerul (W)","New Marine Lines","New Panvel (E)","New Panvel (W)","Opera House","Oshiwara","Parel","Peddar Road","Phoenix Mills","Powai","Prabhadevi","Sahar","Sakinaka","Sanpada","Santacruz (E)","Santacruz (W)","Santacruz Airport","Sewri","Shivaji Park","Sion (E)","Sion (W)","South Bombay","Taloja (E)","Taloja (W)","Tardeo","Thakurli (E)","Thakurli (W)","Thane","Thane (E)","Thane (W)","Turner Road","Ulwe (E)","Ulwe (W)","Vasai (E)","Vasai (W)","Vashi","Vashi (E)","Vashi (W)","Versova","Vikhroli (E)","Vikhroli (W)","Vile Parle (E)","Vile Parle (W)","Virar (E)","Virar (W)","Wadala","Walkeshwar","Waterfield Road","Western Suburbs","Worli","Zaveri Bazar");

function init(ev){
	var key = (window.event) ? window.event.keyCode : ev.keyCode;
	var RETURN = 13;
	var TAB = 9;
	var ESC = 27;
	var bubble = true;
	switch(key){
		case RETURN:
		case TAB:
		case ESC:
			bubble = false;
			clearSuggestions();
			break;
	}
	return bubble;
}

function suggest(ev){
	var key = (window.event) ? window.event.keyCode : ev.keyCode;
	var ARRUP = 38;
	var ARRDN = 40;
	var bubble = true;
	switch(key){
		case ARRUP:
			changeHighlight("up");
			bubble = false;
			break;
		case ARRDN:
			changeHighlight("down");
			bubble = false;
			break;
		default:
			getSuggestions(bObject("localityBox").value);
	}
	return bubble;
}

function restoreAll(){
	var total = NUMBER_OF_RESULTS >= availableResults ? availableResults : NUMBER_OF_RESULTS;
	for(var i=0; i<total; i++){
		try{
			restore(bObject("suggest_" + i));
		}catch(e){}
	}
}

function restore(elem){
	elem.className = "suggestNormal";
}

function highlight(elem){
	elem.className = "suggestHover";
}

var _Curr = 0;
var NUMBER_OF_RESULTS = 10;
var availableResults = 0;

function changeHighlight(key){
	var obj = false;
	try{obj = bObject("suggest");}catch(e){}
	if(obj){
		var sugg = false;
		try{sugg = bObject("suggest");}catch(e){}
		if(sugg){
			var currElem = "suggest_1";
			var currObj = false;
			try{currObj = bObject(currElem);}catch(e){}
			if(currObj){
				var total = NUMBER_OF_RESULTS >= availableResults ? availableResults : NUMBER_OF_RESULTS;
				for(var i=1; i<=total; i++){
					try{
						restore(bObject("suggest_" + i));
					}catch(e){}
				}

				if(key == "up"){
					if(_Curr != 0)_Curr -= 1;
				}else if(key == "down"){
					if(_Curr != total)_Curr += 1;
				}
				currElem = "suggest_" + _Curr;
				try{currObj = bObject(currElem);}catch(e){}
				if(currObj){
					highlight(currObj);
					populate(currObj);
				}
			}else{
				try{restore(bObject("suggest_" + _Curr));}catch(e){}
				if(_Curr > 0){_Curr -= 1;}else{_Curr = -1;}
			}
		}
	}
}

function populate(currObj){
	var tokens = bObject("localityBox").value.split(",");
	var tokenisedInput = "";
	for(var k=0; k<tokens.length; k++){
		if(k != (tokens.length - 1)){
			tokenisedInput += trim(tokens[k]) + ", ";
		}
	}
	tokenisedInput += stripTags(currObj.innerHTML);
	bObject("localityBox").value = tokenisedInput;
	bObject("localityBox").focus();
}

function stripTags(str){
	var stripped = str.replace(/(<([^>]+)>)/ig,"");
	return stripped;
}

function getSuggestions(str){
	if(show){
		var input = str.toLowerCase();
		var tokens = input.split(",");
		input = trim(tokens[tokens.length - 1]);
		_Curr = 0;

		var len = input.length;
		var results = new Array();
		var suggestions = new Array();

		if (len){
			for (var i=0;i<locations.length;i++){
				if (locations[i].substring(0, len).toLowerCase() == input){
					results[results.length] = "<b>" + locations[i].substring(0, len) + "</b>" + locations[i].substring(len, locations[i].length);
					if(results.length == NUMBER_OF_RESULTS){
						break;
					}
				}else{
					var start = locations[i].toLowerCase().indexOf(" " + input);
					if(start > 0 && suggestions.length < NUMBER_OF_RESULTS){
						var suggestion = locations[i].substring(0, start) + "<b>" + locations[i].substring(start, start + len + 1) + "</b>" + locations[i].substring(start + len + 1, locations[i].length);
						suggestions[suggestions.length] = suggestion;
					}
				}
			}
		}
		var result = results.length > 0 ? results:suggestions;
		createDropDown(result);
	}else{
		show = true;
	}
}

function createDropDown(results){
	var y = posY("localityBox");
	var x = posX("localityBox");
	var w = bObject("localityBox").clientWidth;

	try{
		document.getElementsByTagName("body")[0].removeChild(bObject("suggest"));
	}catch(e){}

	var div = document.createElement("div");
	div.id = "suggest";
	div.style.position = "absolute";
	div.style.left = x + "px";
	div.style.top = y + bObject("localityBox").clientHeight + 3 + "px";
	div.style.width = w + "px";
	if(Safari){
	 div.style.top = parseInt(div.style.top) + 20 + "px";
	 div.style.width = (w - 1) + "px";
	}
	if(IE){
	 div.style.left = parseInt(div.style.left) - 4 + "px";
	 div.style.top = parseInt(div.style.top) + 3 + "px";
	 div.style.width = (w + 3) + "px";
	}
	div.className = "suggestContainer";

	document.getElementsByTagName("body")[0].appendChild(div);
	div.innerHTML = "";
	if(results.length == 0){
		div.style.display = "none";
	}else{
		div.style.display = "";
	}

	for(var i=1; i<=results.length; i++){
		var mouseaction = "onmouseover='restoreAll();highlight(this);_Curr="+ i +";' onmouseout='restore(this)' onclick='populate(this);clearSuggestions()'";
		div.innerHTML += "<div class='suggestNormal' id='suggest_" + i + "' " + mouseaction + ">" + results[i-1] + "</div>";
	}
	availableResults = results.length;
}

var show = true;
function clearSuggestions(){
	try{
		document.getElementsByTagName("body")[0].removeChild(bObject("suggest"));
	}catch(e){}
	show = false;
}

document.onclick = handleClick;
function handleClick(evt)
{
	evt = (evt) ? evt : ((window.event) ? window.event : null);
	var checkParent = function(chld,linkedElement)
	{
		while(chld.parentNode)
		{
			if(chld == bObject(linkedElement))
			{
				return false;
			}
			chld = chld.parentNode;
		}
		return true;
	}
	if (evt) 
	{
		var target = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
		var type = (evt.type) ? evt.type : ((event.type) ? event.type : null);
		// remove the suggest window upon click outside
		try
		{
			var parent = checkParent(target,'suggest');
			if(parent)
			{
				if(target.id.indexOf('localityBox') >= 0)
				{
					return;
				}
				else
				{
					document.body.removeChild(bObject('suggest'));
				}
			}
		}
		catch(e)
		{}
	}
}

//-------------------------------------------------------------------
//	COMMON METHODS USED IN ALL THE PAGES
function SearchPost()
{
	$('#progress-message', { close:false }).modal({ onOpen: function (dialog) 
	{
		dialog.overlay.fadeIn('slow', function () {					 
		});
	}}); 
} 

