SRequest = function (_businessWord, _addressWord,  _request){
	var sBusinessWord = _businessWord;
	var sAddressWord = _addressWord;
	var sRequest = _request;	
	
	this.getBusinessWord = function(){
		return sBusinessWord;
	}
	
	this.getAddressWord = function(){
		return sAddressWord;
	}
	
	this.getRequest = function(){
		return sRequest;
	}
}

if(!window.console){
	window.console = {};
	//console.log = function(arg){ window.status = arg; }
	
};

var window_zIndexOn = 800000;

var IE6 = false /*@cc_on || @_jscript_version < 5.7 @*/;
var IE7 = false /*@cc_on || @_jscript_version == 5.7 @*/;
var IE8 = false /*@cc_on || @_jscript_version >= 5.7 @*/;
var IE = /*@cc_on!@*/false;

/* Imports */
//var $I = YAHOO;
var $I = GNW;
var $G = $I.util;
var $D = $I.util.Dom;
var $E = YAHOO.util.Event;
//evitar warnings no velocity
var _YD = $D;

var map;
var minimap;
var router;
var updateMapLock = false;
var updateMiniMapLock = false;
var mouseX, mouseY;
var mouseXClick = null;
var mouseYClick = null;
var dragMiniMap = false;
var gapDragCenterX, gapDragCenterY;
var centerMiniMapX, centerMiniMapY;
var selectionSWPoint = null;
var selectionNEPoint = null;
var selectionMapEnable = false; // Mutex;
var markerManager = new MarkerManager();
var loc = false; var cook = false; 
var inputAddressValue = '¿Dónde? (calle, nº, comuna, provincia, región) o ¿qué? ...';
var inputBusinessValue = '¿Qué? (actividades o empresas o personas)';
var inputBusinessInValue = '¿Dónde? (calle, n°, comuna, província, región)';
var inputRouteValue = '¿Dirección de origen? (calle, n°, comuna, provincia, región)';
var inputRouteToValue = '¿Dirección de destino? (calle, n°, comuna, provincia, región)';
var documentTitle = " - Aquí podrás encontrar lo que necesitas de una manera rápida y fácil.";
var flash; 
var currentAddressPlot = null;
var _flickrEnabled = true;
var mapFeatures = {
'flickr': false,
'wiki': false,
'pan': false
};
var requestManager = {};
var explorer;//controlará o explorer da home; 
var _region;
var __monitor;// = new ActivityMonitor(); // status para o usuário
/* GLOBAL TO */

/* GLOBAL VARS TO PERMLINK */
var q = queryString('q') || false;
var ll = queryString('ll') || false;
var qll = queryString('qll') || false;
var pg = queryString('pg') || false;
var id = queryString('id') || false;
var op = queryString('op') || false;
var z = queryString('z') || false;
var printer = queryString('printer') || false;
var email = queryString('email') || false;
var route = queryString('route') || false;


//Implementa indexOf em Arrays no ie
if(!Array.indexOf){Array.prototype.indexOf = function(obj){for(var i=0; i<this.length; i++)if(this[i]==obj){return i};return -1;}}


var Stage = function Stage() {
	
	var _self = this;
	var _isLoaded = false;
	var _initEvent = new $G.CustomEvent('onInit', this);

	this.onInit = function onInit(handler, scope){
		if(!_isLoaded){ _initEvent.subscribe(handler, scope, true); }
		else{ handler.apply(scope); }
	};
	
	var _init = function _init(){
        // Todo: fazer um design bonitinho para alertar o usuario
        // checkBrowser();

		Stage.handlerResize();
		Stage.fillInputValue();

		$E.addListener(window, 'resize', Stage.handlerResize);
		if ($D.get('regions')) {
			$D.get('regions').scrollTop = 0;
		}

		// Lupa
		$E.addListener($D.get('mapBlock'), 'mousemove', onMouseMove);		
		$E.addListener($D.get('mapBlock'), 'mousedown', onSelectionStart);
		$E.addListener($D.get('mapBlock'), 'mouseup', onSelectionEnd);
		$E.addListener($D.get('mapBlock'), 'mouseover', onMouseOver);
		$E.addListener($D.get('mapBlock'), 'mouseout', onMouseOut);				
		$E.addListener($D.get('mapSelection'), 'mousemove', onMouseMove);		
		$E.addListener($D.get('mapSelection'), 'mousedown', onSelectionStart);
		$E.addListener($D.get('mapSelection'), 'mouseup', onSelectionEnd);
		$E.addListener($D.get('mapSelection'), 'mouseover', onMouseOver);
		$E.addListener($D.get('mapMini'), 'mousemove', onMouseMove);
		//$E.addListener($D.get('mapMini'), 'mouseup', onSelectionEnd);
		
		// minimapa
		$E.addListener($D.get('mapMiniContainerCenter'), 'mousemove', onDragCenterMiniMap);
		$E.addListener($D.get('mapMiniContainerCenter'), 'mousedown', onDragStartMiniMap);
		$E.addListener($D.get('mapMiniContainerCenter'), 'mouseup', onDragEndMiniMap);
		$E.addListener($D.get('mapMiniContainer'), 'mousemove', onDragCenterMiniMap);
		$E.addListener($D.get('mapMiniContainer'), 'mouseup', onDragEndMiniMap);
		$E.addListener($D.get(document), 'mouseup', onDragEndMiniMap);
		
								
		_setEvents();
		_initZoomControl();
				
		if ($D.get('suggest')) {
			
			/**
			 * Address Suggest
			 */
			
			SuggestAddress = new Suggest();
			var objSuggestAddress = {
				idInput : 'inputAddress',
				//url : 'suggestAddress.do',
				url : 'suggestUniversalSearch.do',
				target : 'suggestContent'
			};
			SuggestAddress.createSuggest(objSuggestAddress);
			SuggestAddress.doSuggestEvent(getSuggestOnOff);
			SuggestAddress.doSuggestActive(_setInputActive);
			SuggestAddress.notFound(_suggestNotFound);
			
			SuggestBusiness = new Suggest();
			var objSuggestBusiness = {
				idInput : 'inputBusiness',
				url : 'suggestWhat.do',
				target : 'suggestContent'
			};
			SuggestBusiness.createSuggest(objSuggestBusiness);
			SuggestBusiness.doSuggestEvent(getSuggestOnOff);
			SuggestBusiness.doSuggestActive(_setInputActive);
			SuggestBusiness.notFound(_suggestNotFound);
			
			SuggestBusinessIn = new Suggest();
			var objSuggestAddress = {
				idInput : 'inputBusinessIn',
				url : 'suggestAddress.do',
				target : 'suggestContent'
			};
			SuggestBusinessIn.createSuggest(objSuggestAddress);
			SuggestBusinessIn.doSuggestEvent(getSuggestOnOff);
			SuggestBusinessIn.doSuggestActive(_setInputActive);
			SuggestBusinessIn.notFound(_suggestNotFound);
			
			SuggestRoute = new Suggest();
			var objSuggestAddress = {
				idInput : 'inputRoute',
				url : 'suggestAddress.do',
				target : 'suggestContent'
			};
			SuggestRoute.createSuggest(objSuggestAddress);
			SuggestRoute.doSuggestEvent(getSuggestOnOff);
			SuggestRoute.doSuggestActive(_setInputActive);
			SuggestRoute.notFound(_suggestNotFound);
			
			SuggestRouteTo = new Suggest();
			var objSuggestAddress = {
				idInput : 'inputRouteTo',
				url : 'suggestAddress.do',
				target : 'suggestContent'
			};
			SuggestRouteTo.createSuggest(objSuggestAddress);
			SuggestRouteTo.doSuggestEvent(getSuggestOnOff);
			SuggestRouteTo.doSuggestActive(_setInputActive);
			SuggestRouteTo.notFound(_suggestNotFound);
			
		}
		
		/* hacks */
		$D.setStyle('mapMiniMap.cntMap.img.logo','display','none');
		$D.setStyle('map.cntMap.img.logo','z-index','100');

		/* desmarca flickr */
		if ($D.get('flickr')) {
			$D.get('flickr').checked = false;
		}
		
		// carrega o map
		_loadMap();
	
	};
	
	_initEvent.subscribe(_init);
	
	this.init = function init(){
		_isLoaded = true;
		_initEvent.fire(null);
	};
	
};

var getCurrentCoordinates = function(){
	var southWestPoint = map.getSouthWest();
	var northEastPoint = map.getNorthEast();
	var southtLL = southWestPoint.getLatitude() + ',' + southWestPoint.getLongitude();
	var nortLL = northEastPoint.getLatitude() + ',' + northEastPoint.getLongitude();
	
	return {
		s:southWestPoint,
		n:northEastPoint,
		sLL:southtLL,
		nLL:nortLL
	}
}


MegaBlasterOpen = function(advId, acts, id){
	var elId = $D.get('infoWindowPlot' + id);
	var link = $D.getElementsByClassName("infoWindowPlot","div",elId)[0];
	var container = $D.get("infoContainer"+id);
	var index = ++window_zIndexOn;
	
	showAdDetail(elId, advId, acts, id);
	
	container.style.display = "";
	elId.className="box2";
	link.style.display="none";
}

function levelUp(e){
	var target = e.currentTarget ? e.currentTarget : e.srcElement;
	while(target.id.indexOf("map_cntLayers")== -1){
		target = target.parentNode
	}
	target.style.zIndex = ++window_zIndexOn;
}

MegaBlasterClose = function(t){
	var id = t.parentNode.parentNode.parentNode.id.replace("infoContainer","");
	var elId = $D.get('infoWindowPlot' + id);
	var link = $D.getElementsByClassName("infoWindowPlot","div",elId)[0];
	var container = $D.get("infoContainer"+id);
	
	$E.removeListener(elId.parentNode, 'click', levelUp);
	
	container.style.display = "none";
	link.style.display = "block";
	elId.className="plotBusinessAdTop";
}		


var showAdDetail = function(el, id, acts, ord){
	var request = new Request();
	var idEl = "infoContainer"+ord;
	request.getAsync('detail.do?id=' + id + '&acts=' + escape(acts) + '&ord=' + ord, idEl);
	//BUG-FIX: colocar essas funções na hora da plotagem da infoWindow
	GNW.util.Event.onMouseWheel(el.parentNode, function(e){});
	GNW.util.Event.on(el, 'mousedown', function(e){$E.stopPropagation(e)});
};

var showBulletDetail = function(el, id, acts, ord){
	var request = new Request();
	request.getSync('detailBullet.do?id=' + id, el);

	//BUG-FIX: colocar essas funções na hora da plotagem da infoWindow
	GNW.util.Event.onMouseWheel(el.parentNode, function(e){});
	GNW.util.Event.on(el, 'mousedown', function(e){$E.stopPropagation(e)});
};

var showIpointDetail = function(el, id) {
	var request = new Request();
	request.getSync('detailIPoint.do?id=' + id, el);
};

var showPanoramicoDetail = function(el, id, acts, ord) {
	//var id = 2994337; // Hack.
	var dElm = document.createElement('DIV');
	var infoClose = [];
	infoClose.push ('<em class="plotPanoramic"><!-- --></em>');
	infoClose.push ('<a href="javascript://" class="infoClose" onclick="this.parentNode.parentNode.className=\'plotPanoramico\';$D.removeClass(this.parentNode.parentNode.parentNode,\'openZindex\');return false;"> </a>');
	infoClose.push ('<h4>Panoramicas</h4>');
	infoClose = infoClose.join('');
	$D.addClass(dElm,'divFlash');
	el.appendChild(dElm);
	dElm.innerHTML += flashObj(imagesUrl + 'dbimages/ruas/swf/pan' + id + '.swf', '599', '252');
	el.innerHTML = infoClose + el.innerHTML;
	dElm = null;
};


Stage.getInstance = function() {
	if(!Stage._instance){ Stage._instance = new Stage(); }
	if(!window.Gonow){
		window.Gonow = {};
		Gonow.stage = Stage._instance;
	}
	return Stage._instance;
};
Stage.fillInputValue = function fillInputValue() {
	
	if($D.get('inputAddress')){
		$D.get('inputAddress').value = inputAddressValue;
	};
	if($D.get('inputBusiness')){
		$D.get('inputBusiness').value = inputBusinessValue;
	};
	if($D.get('inputBusinessIn')){
		$D.get('inputBusinessIn').value = inputBusinessInValue;
	};
	if($D.get('inputRoute')){
		$D.get('inputRoute').value = inputRouteValue;
	};
	if($D.get('inputRouteTo')){
		$D.get('inputRouteTo').value = inputRouteToValue;
	};
}

Stage.setInputValue = function setInputValue(e) {
	
	var _e = e || {};
	var _action = (_e.type);
	var defaultValue;
	
	if (this.id == 'inputAddress'){
		defaultValue = inputAddressValue;
	} else if (this.id == 'inputBusiness'){
		defaultValue = inputBusinessValue;
	} else if (this.id == 'inputBusinessIn'){
		defaultValue = inputBusinessInValue;
	} else if (this.id == 'inputRoute'){
		defaultValue = inputRouteValue;
	} else {
		defaultValue = inputRouteToValue;
	}
	
	if (_action == 'focus' && ((this.value == defaultValue) || this.value == '')){
		this.value = ''
		$D.replaceClass(this,'inputBlur','inputFocus')
	} else if (_action == 'blur' && (this.value == '')) {
		this.value = defaultValue
		$D.replaceClass(this,'inputFocus','inputBlur')
	}

}

Stage.handlerResize = function handlerResize(){
	var widthDocument = $D.getViewportWidth();
	var heightDocument = $D.getViewportHeight();
	var heightHeader = 119;
	var heightFooter = 40;
	
	if (!queryString('print')) {
	
		var widthBorders = 34;
		var widthLeft = $D.get('left').clientWidth;
		var widthRight = widthDocument - widthLeft - widthBorders;
		
		$D.setStyle('right', 'margin-left', (widthLeft + 12 + 'px'));
		$D.setStyle('right', 'width', (widthRight + 'px'));
		$D.setStyle('rightAd', 'width', (widthRight + 'px'));
		$D.setStyle('map', 'width', (widthRight + 'px'));
		$D.setStyle('map_containerMap', 'width', (widthRight + 'px'));
		$D.setStyle('map.cntMap', 'width', (widthRight + 'px'));
		$D.setStyle('map.cntMove', 'width', (widthRight + 'px'));
		$D.setStyle('waitLeft', 'width', (widthLeft + 'px'));
		$D.setStyle('mapSkinEmail', 'width', (widthDocument + 'px'));

		if ($D.get('leftAd') && $D.hasClass($D.get('leftAd'),'on')) {
			heightLeftAd = $D.get('leftAd').clientHeight;
		}
		else {
			heightLeftAd = 0;
		}
		if ($D.get('rightAd')) {
			heightRightAd = 41;
		}
		else {
			heightRightAd = 0;
		}
		heightSuggest = parseInt($D.get('suggest').clientHeight);
		heightCenter = heightDocument - heightHeader - heightSuggest - heightFooter;
		heightLeftContent = heightCenter;
		heightRight = heightCenter;
		heightRightMap = heightCenter - heightRightAd;
		$D.setStyle('center', 'height', (heightCenter + 'px'));
		$D.setStyle('left', 'height', (heightCenter + 'px'));
		$D.setStyle('right', 'height', (heightCenter + 'px'));
		$D.setStyle('map', 'height', (heightCenter + 'px'));
		$D.setStyle('map.cntMap', 'height', (heightCenter + 'px'));
		$D.setStyle('map_containerMap', 'height', (heightCenter + 'px'));
		$D.setStyle('map.cntMove', 'height', heightLeftContent + 'px');
		$D.setStyle('leftContent', 'height', heightLeftContent - heightLeftAd + 'px');
		$D.setStyle('waitLeft', 'height', (heightCenter + 'px'));
		$D.setStyle('mapSkinEmail', 'height', (heightDocument + 'px'));
		
		var rightAdHeight = 10;
		
		if ($D.get('rightAd')) {
			rightAdHeight = parseInt($D.get('rightAd').clientHeight);
		}
		
		$D.setStyle('mapMini', 'bottom', (10 + rightAdHeight) + 'px');
		$D.setStyle('btnShowMiniMap', 'bottom', (10 + rightAdHeight) + 'px');
		$D.setStyle('map_cntMap_img_logo', 'bottom', (6 + rightAdHeight) + 'px');
		
		setTimeout(function(){
			$D.setStyle('map.cntMap.img.logo', 'bottom', (10 + rightAdHeight) + 'px');
			$D.setStyle('map.cntMap.img.logo', 'top', '');
		}, 50);
			

	} else {
		
		var widthBorders = 40;
		var heightTop = $D.get('printTop').clientHeight;
		
		$D.setStyle('printBottom', 'height', (heightDocument - heightTop + 'px'));
		$D.setStyle('mapSkinEmail', 'height', (heightDocument + 'px'));

	}
	
	if (map) 
		map.updateSize();

}

Stage.permLink = function permLink() {
	var _file = window.location.pathname;

	var href = 'http://' + window.location.host + _file + '?'
	var url = [];
	url.push(href);
    url.push(Stage.permLinkParams());

    var result = url.join('');
	
	if ( ( result.lastIndexOf('&') + 1 ) == ( result.length ) ) {
		result = String(result).substring(0,(result.length - 1));
	}
	
	return 	result;
}

Stage.permLinkParams = function permLinkParams() {
    var result = [];
    if (q){
		result.push('q=' + q + '&');
	}
	if (ll){
		result.push('ll=' + ll + '&');
	}
	if (z){
		result.push('z=' + z + '&');
	}
	if (qll){
		result.push('qll=' + qll + '&');
	}
	if (pg){
		result.push('pg=' + pg + '&');
	}
	if (id){
		result.push('id=' + id + '&');
	}
	if (printer){
		result.push('printer=' + printer + '&');
	}
	if (email){
		result.push('email=' + email + '&');
	}
	if (op){
		result.push('op=' + op + '&');
	}
	if (route){
		result.push('route=' + route);
	}
    return result.join('');
}

Stage.mapSkinLink = function mapSkinLink(e,o) {
	
	$D.removeClass('mapSkinLink','off');
	$D.get('createLinkPanelText').value = Stage.permLink();
	
	$E.stopPropagation(e);	
	$E.addListener(document,'click',Stage.mapSkinLinkClose);
	$E.addListener($D.get('mapSkinLink'),'click',Stage.mapSkinLinkOpen);
	
}

Stage.mapSkinLinkClose = function mapSkinLinkClose() {
	$D.get('createLinkPanelText').value = '';
	$D.addClass('mapSkinLink','off');
	$E.removeListener(document,'click',Stage.mapSkinLinkClose);
}
Stage.mapSkinLinkOpen = function mapSkinLinkOpen(e) {
	$E.stopPropagation(e);
}

Stage.mapSkinEmail = function mapSkinEmail(e,o) {
	
	//Deixando o banner para baixo do mapSkinEmailCover
	if($D.get('leftAd')){
		$D.get('leftAd').style.position = 'absolute';
		$D.get('leftAd').style.zindex = '0';	
	}
/*
	var request = new Request();	
	$D.removeClass('mapSkinEmail','off');
	//request.getAsync(Stage.permLink() + '&email=true', 'mapSkinEmail');
	request.getAsync('home.do?email=true', 'mapSkinEmail');
	$E.addListener('mapSkinEmailClose','click',Stage.mapSkinEmailClose);
	$E.addListener('emailCancel','click',Stage.mapSkinEmailClose);
*/
	map.mailForm(); 

}


Stage.mapSkinPrint = function mapSkinPrint() {
	
	var analysis, go; 

	analysis = function() {
		
		if ( $D.hasClass('waitLeft','off') ) {
			go();
		} else {
			var tm = setTimeout(function(){
				analysis();
			},500);
		}
	}
	
	go = function(){
		window.open(Stage.permLink() + '&print=true');
		return false;
	}
	
//	analysis();	
	map.print();	
}

Stage.doubleClick = function doubleClick(e) {
	
	var leftWidth = 0;
	var suggestHeight = 0;
	var left = 0;
	var top = 0;
	
	var _e = e || {};
	if($D.get('left')){
		var leftWidthDescont = $D.getStyle('left','width');
			if (leftWidthDescont == "284px") {
				left = (leftWidth.clientWidth || 0) + 300;
			}
			else {
				left = (leftWidth.clientWidth || 0);
			}		
	}
	else{
		left = (leftWidth.clientWidth || 0) + 30;
	}
	
	if($D.get('suggest')){
		top = (suggestHeight.clientHeight || 1) + 123;		
	}
	else{
		top = (suggestHeight.clientHeight || 1) + 120;		
	}
	var mouseX = _e.clientX - left;
	var mouseY = _e.clientY - top;
	var latLng = map.pixelToLatLng(new CPoint(mouseX, mouseY));
	var zoomTo = (map.getZoom());
	
	if (zoomTo > 0) {
		zoomTo -= 1;
	}

	map.setFocus((new CPoint(latLng.getLongitude(),latLng.getLatitude())),zoomTo);

}




	





Stage.mapMore = function mapMore(e,o) {
	$D.addClass('mapMore','open');
	$D.addClass('mapSkinLink','off');
	$E.stopPropagation(e);	
	$E.addListener(document,'click',Stage.mapMoreClose);
	$E.removeListener($D.get('mapMoreTitle'),'click',Stage.mapMore);
	$E.addListener($D.get('mapMore'),'click',Stage.mapMoreOpen);
	$E.addListener($D.get('mapSkinLinkBt'),'click',Stage.mapMoreClose);
	
}
Stage.mapMoreClose = function mapMoreClose(e,o) {
	$D.removeClass('mapMore','open');
	$E.addListener($D.get('mapMoreTitle'),'click',Stage.mapMore);
	$E.removeListener(document,'click',Stage.mapSkinLinkClose);
	$E.removeListener($D.get('mapMore'),'click',Stage.mapMoreOpen);
	$E.removeListener($D.get('mapSkinLinkBt'),'click',Stage.mapMoreClose);

}
Stage.mapMoreOpen = function mapMoreOpen(e,o) {
	$E.stopPropagation(e);
}


Stage.mapSkinLink = function mapSkinLink(e,o) {
	
	$D.removeClass('mapSkinLink','off');
	$D.get('createLinkPanelText').value = Stage.permLink();
	
	$E.stopPropagation(e);	
	$E.addListener(document,'click',Stage.mapSkinLinkClose);
	$E.addListener($D.get('mapSkinLink'),'click',Stage.mapSkinLinkOpen);
	
}

Stage.mapSkinLinkClose = function mapSkinLinkClose() {
	$D.get('createLinkPanelText').value = '';
	$D.addClass('mapSkinLink','off');
	$E.removeListener(document,'click',Stage.mapSkinLinkClose);
}
Stage.mapSkinLinkOpen = function mapSkinLinkOpen(e) {
	$E.stopPropagation(e);
}










Stage.publiguiasMas = function publiguiasMas(e,o) {
	$D.removeClass('mas','off');
	$E.stopPropagation(e);	
	$E.removeListener('masLink','click',Stage.publiguiasMas);
	$E.addListener(document,'click',Stage.publiguiasMasClose);
	$E.addListener('masLink','click',Stage.publiguiasMasClose);
	$E.addListener($D.get('mas'),'click',Stage.publiguiasMasOpen);
}
Stage.publiguiasMasClose = function publiguiasMas() {
	$D.addClass('mas','off');
	$E.removeListener(document,'click',Stage.publiguiasMasClose);
	$E.removeListener('masLink','click',Stage.publiguiasMasClose);
	$E.addListener('masLink','click',Stage.publiguiasMas);
}
Stage.publiguiasMasOpen = function publiguiasMasOpen(e) {
	$E.stopPropagation(e);
}


Stage.footerCredit = function footerCredit(e,o) {
	$D.removeClass('credits','off');
	$E.stopPropagation(e);	
	$E.removeListener('creditsLink','click',Stage.footerCredit);
	$E.addListener(document,'click',Stage.footerCreditClose);
	$E.addListener('creditsLink','click',Stage.footerCreditClose);
	$E.addListener('limitLink','click',Stage.footerCreditClose);
	$E.addListener($D.get('credits'),'click',Stage.footerCreditOpen);
}
Stage.footerCreditClose = function footerCredit() {
	$D.addClass('credits','off');
	$E.removeListener(document,'click',Stage.footerCreditClose);
	$E.removeListener('creditsLink','click',Stage.footerCreditClose);
	$E.removeListener('limitLink','click',Stage.footerCreditClose);
	$E.addListener('creditsLink','click',Stage.footerCredit);
}
Stage.footerCreditOpen = function footerCreditOpen(e) {
	$E.stopPropagation(e);
}

Stage.footerLimit = function footerLimit(e,o) {
	$D.removeClass('limit','off');
	$E.stopPropagation(e);	
	$E.removeListener('limitLink','click',Stage.footerLimit);
	$E.addListener(document,'click',Stage.footerLimitClose);
	$E.addListener('limitLink','click',Stage.footerLimitClose);
	$E.addListener('creditsLink','click',Stage.footerLimitClose);
	$E.addListener($D.get('limit'),'click',Stage.footerLimitOpen);
}
Stage.footerLimitClose = function footerLimitClose() {
	$D.addClass('limit','off');
	$E.removeListener(document,'click',Stage.footerLimitClose);
	$E.removeListener('limitLink','click',Stage.footerLimitClose);
	$E.removeListener('creditsLink','click',Stage.footerLimitClose);
	$E.addListener('limitLink','click',Stage.footerLimit);
}
Stage.footerLimitOpen = function footerLimitOpen(e) {
	$E.stopPropagation(e);
}


Stage.tagsControl = function tagsControl() {
	$D.get('tagsGetMore').className = 'businessTags big off';
	var liList = $D.getElementsByClassName('tagsComplete');
	var i=0;
	for (i=0;i<liList.length;i++){
		$D.removeClass(liList[i],'tagsComplete');
	}
}

Stage.suggestOnOff = function sugestOnOff(e,o) {
	if (!$D.get('suggest')) return;
	var suggestCurrent = $D.get('suggest').className;
	var _o = o || {};
	var objAction = (_o.action);
	
	var suggestOpen = function suggestOpen() {
		// verifica se tem conteúdo
		if ($D.get('suggestContent').innerHTML != '<!-- -->') {
			$D.get('suggest').className = 'active';
		} else {
			suggestClose();
		}
	}
	var suggestClose = function suggestClose() {
		$D.get('suggest').className = 'line';
	}
	var suggestMini = function suggestMini() {
		$D.get('suggest').className = 'mini';
	}
	
	if (typeof(objAction) == 'undefined') {
		if(suggestCurrent == 'line'){
			getSuggestOnOff();
		}else{
			suggestClose();
		}
	} else if(objAction == 'mini'){
		suggestMini();
	}else if(objAction == 'open'){
		suggestOpen();
	}else if(objAction == 'close'){
		suggestClose();
	}

	Stage.handlerResize();
	
}


Stage.leftOnOff = function leftOnOff(objAction) {
	
	var currentLeft = $D.getStyle('left','visibility');
	
	if(objAction == 'off'){
		setLeftOff();
	} else if(objAction == 'on') {
		setLeftOn();
	} else {
		if (currentLeft == 'hidden' ) {	
			setLeftOn();
		}else{
			setLeftOff();
		}
	}
	Stage.handlerResize();
	
}
var setLeftOn = function setLeftOn(){
	$D.removeClass('left','hide');
	$D.removeClass('ShowHideLeft','hide');
	if($D.hasClass('leftAd', 'on active')){
		Stage.leftAdAction();	
	}
}
var setLeftOff = function setLeftOff(){
	$D.get('left').className = 'hide';
	$D.get('ShowHideLeft').className = 'hide';
	if($D.hasClass('leftAd', 'on active')){
		Stage.leftAdAction();	
	}
}


Stage.tabNav = function tabNav(e,o) {
	if ($D.get('tabNav')) {
		var _o = o || {};
		var objLabel = (_o.label);
	
		$D.replaceClass('searchAddress','on','off');
		$D.replaceClass('searchBusiness','on','off');
		$D.replaceClass('searchRoute','on','off');
		$D.removeClass('clickAddress','active');
		$D.removeClass('clickBusiness','active');
		$D.removeClass('clickRoute','active');
			
		if (objLabel == 'business') {
			$D.replaceClass('searchBusiness','off','on');
			$D.get('clickBusiness').className = 'active';
			var what = '';
			var where = '';
			if (($D.get('inputAddress').value != '') && ($D.get('inputAddress').value != inputAddressValue)) {
				var hasKwd = false;
				var in_keywords = new Array('in:', 'en:', 'cerca:');
				for (i=0; i < in_keywords.length ; i++) {
					if ($D.get('inputAddress').value.indexOf(in_keywords[i])!= -1) {
						var result = new Array(2);
						result = $D.get('inputAddress').value.split(in_keywords[i]);
						if (result.length == 1) {
							what  = YAHOO.lang.trim(result[0]);
							where = '';
							$D.replaceClass($D.get('inputBusiness'),'inputBlur','inputFocus');
						} else if (result.length > 1) {
							what  = YAHOO.lang.trim(result[0]);
							where = YAHOO.lang.trim(result[1]);
							$D.replaceClass($D.get('inputBusiness'),'inputBlur','inputFocus');
							$D.replaceClass($D.get('inputBusinessIn'),'inputBlur','inputFocus');
						}
						hasKwd = true;
						break;
					} 
				}
				if (!hasKwd) {
					what = inputBusinessValue;
					where = $D.get('inputAddress').value;
					$D.replaceClass($D.get('inputBusiness'),'inputFocus','inputBlur');
					$D.replaceClass($D.get('inputBusinessIn'),'inputBlur','inputFocus');					
				}				
				if ((where.toLowerCase().indexOf('empresa:')!= -1) || (where.toLowerCase().indexOf('actividad:')!= -1) || 
						(where.toLowerCase().indexOf('persona:')!= -1)) {
					what  = YAHOO.lang.trim(where.substring(where.indexOf(':') + 1, where.length));
					where = inputBusinessInValue;
					$D.replaceClass($D.get('inputBusiness'),'inputBlur','inputFocus');
					$D.replaceClass($D.get('inputBusinessIn'),'inputFocus','inputBlur');
				}				
			} else {
				what = inputBusinessValue;
				where = inputBusinessInValue;
				$D.replaceClass($D.get('inputBusiness'),'inputFocus','inputBlur');
				$D.replaceClass($D.get('inputBusinessIn'),'inputFocus','inputBlur');				
			}
			
			$D.get('inputBusiness').value = what;
			$D.get('inputBusinessIn').value = where;

		} else if(objLabel == 'route') {
			$D.replaceClass('searchRoute','off','on');
			$D.get('clickRoute').className = 'active';
		} else {
			$D.replaceClass('searchAddress','off','on');
			$D.get('clickAddress').className = 'active';
			if (($D.get('inputBusiness').value != '') || ($D.get('inputBusinessIn').value != '')) {
				if (($D.get('inputBusiness').value != '') && ($D.get('inputBusinessIn').value != '') && 
						($D.get('inputBusiness').value != inputBusinessValue) && ($D.get('inputBusinessIn').value != inputBusinessInValue)) {
					$D.get('inputAddress').value = YAHOO.lang.trim($D.get('inputBusiness').value) + ' en: ' + 
						YAHOO.lang.trim($D.get('inputBusinessIn').value);
					$D.replaceClass($D.get('inputAddress'),'inputBlur','inputFocus');
				} else if (($D.get('inputBusiness').value != '') && ($D.get('inputBusiness').value != inputBusinessValue)) {
					if (($D.get('inputBusiness').value.toLowerCase().indexOf('empresa:')!= -1) || 
							($D.get('inputBusiness').value.toLowerCase().indexOf('actividad:')!= -1) || 
							($D.get('inputBusiness').value.toLowerCase().indexOf('persona:')!= -1)) {
						$D.get('inputAddress').value = YAHOO.lang.trim($D.get('inputBusiness').value);
						$D.replaceClass($D.get('inputAddress'),'inputBlur','inputFocus');
					}
				} else if ($D.get('inputBusinessIn').value != inputBusinessInValue) {
					$D.get('inputAddress').value = YAHOO.lang.trim($D.get('inputBusinessIn').value);
					$D.replaceClass($D.get('inputAddress'),'inputBlur','inputFocus');
				}	
			}
		}
	}
}

Stage.bannerCount = 0;
Stage.loadBannerAfter = function(img, url) {
	var imgID = $D.generateId(img,'banner');

	var bannerImages = {
		'rightAdContainer1' : true,
		'rightAdContainer2' : true,
		'rightAdContainer3' : true,
		'rightLinkContainer1' : true,
		'rightLinkContainer2' : true
	};

	var handler = function() {
		if($D.get(this.imgID).getAttribute('loaded') == null) {
			var elmImg = $D.get(this.imgID);
			//$E.removeListener(elmImg,'load');
			//elmImg.setAttribute('onload','');
			elmImg.src = this.url;
			if(elmImg.nodeName == 'IMG' && bannerImages[elmImg.parentNode.parentNode.id] === true) {
				elmImg.onload = function() {
					Stage.bannerCount++;

					if(Stage.bannerCount == 5) {
						rightBannersVerify();
					}
				};
			} else if(elmImg.nodeName == 'IFRAME') {
				
				elmImg.setAttribute('loaded','true');

				//var iframeWindow = window.frames[this.imgID] || elmImg;
				//alert(iframeWindow);

				//iframeEvent = ;// || elmImg.onload;
				
				var iframeHandler = function() {
					if(typeof(this.readyState) == 'undefined' || this.readyState=="complete") {
						var doc = this.contentWindow.document || this.document;
						var objs = doc.getElementsByTagName('OBJECT');

						if(objs.length === 0) {
							$D.get('leftAd').className = 'off';
							Stage.handlerResize();
						} else  {
							$D.get('leftAd').className = 'on';
							Stage.handlerResize();
						}

					}
				};

				elmImg.onreadystatechange = iframeHandler;
				elmImg.onload = iframeHandler;

			}
			elmImg = null;
		}
	};

	Stage.getInstance().onInit(handler, {'imgID':imgID, 'url': url});
	
	img = null;
};

var _inputActive = null;
var _setInputActive = function setInputActive(type,args){
	_inputActive = args[0];
}

var _setEvents = function setEvents(){
	$E.on($D.get('suggestBt'),'click', Stage.suggestOnOff);
	$E.on($D.get('ShowHideLeft'),'click', Stage.leftOnOff);
	$E.on($D.get('clickAddress'),'click', Stage.tabNav,{label: 'address'});
	$E.on($D.get('clickBusiness'),'click', Stage.tabNav,{label: 'business'});
	$E.on($D.get('clickRoute'),'click', Stage.tabNav,{label: 'route'});
	$E.on($D.get('suggestOnBt'),'click', setSuggestOnOff,{action: 'off'});
	$E.on($D.get('suggestOffBt'),'click', setSuggestOnOff,{action: 'on'});
	$E.on($D.get('clickRegiones'),'click', _clickRegiones);
	//$E.on($D.get('tagsGetMore'),'click', Stage.tagsControl);
	$E.on($D.get('zoom'),'click', zoomTool);
	$E.on($D.get('btnHideMiniMap'),'click', hideMiniMap);
	$E.on($D.get('btnShowMiniMap'),'click', showMiniMap);
	$E.on($D.get('inputAddress'),'focus', Stage.setInputValue);
	$E.on($D.get('inputAddress'),'blur', Stage.setInputValue);
	$E.on($D.get('inputBusiness'),'focus', Stage.setInputValue);
	$E.on($D.get('inputBusiness'),'blur', Stage.setInputValue);
	$E.on($D.get('inputBusinessIn'),'focus', Stage.setInputValue);
	$E.on($D.get('inputBusinessIn'),'blur', Stage.setInputValue);
	$E.on($D.get('inputRoute'),'focus', Stage.setInputValue);
	$E.on($D.get('inputRoute'),'blur', Stage.setInputValue);
	$E.on($D.get('inputRouteTo'),'focus', Stage.setInputValue);
	$E.on($D.get('inputRouteTo'),'blur', Stage.setInputValue);
	$E.on($D.get('leftAdOnOff'),'click', Stage.handlerResize);
	$E.on($D.get('regionOnOff'),'click', Stage.regionOnOff);
	$E.on($D.get('sliderRegionDown'),'click',Stage.regionSliderDown);
	$E.on($D.get('leftAdOnOff'),'click',Stage.leftAdAction);
	$E.on($D.get('mapSkinLinkBt'),'click',Stage.mapSkinLink);
	$E.on($D.get('mapSkinLinkClose'),'click',Stage.mapSkinLinkClose);
	$E.on($D.get('mapSkinEmailBt'),'click',Stage.mapSkinEmail);
	$E.on($D.get('mapSkinEmailClose'),'click',Stage.mapSkinEmailClose);
	$E.on($D.get('emailCancel'),'click',Stage.mapSkinEmailClose);
	$E.on($D.get('mapSkinPrintBt'),'click',Stage.mapSkinPrint);
	$E.on($D.get('masLink'),'click',Stage.publiguiasMas);
	$E.on($D.get('creditsLink'),'click',Stage.footerCredit);
	$E.on($D.get('limitLink'),'click',Stage.footerLimit);
	$E.on($D.get('changeBt'),'click',Stage.routeChange);
	$E.on($D.get('mapMoreTitle'),'click',Stage.mapMore);
	$E.on($D.get('flickr'),'click',checkMapFeature,{label: 'flickr'});
	$E.on($D.get('map'),'dblclick',Stage.doubleClick);

	$E.on(document.getElementsByTagName('input'),'focus',inputFocus);
	$E.on(document.getElementsByTagName('input'),'blur',inputBlur);
	$E.on($D.get('map'),'onmouseover',mapOver);
	$E.on($D.get('map'),'onmousedown',mapDown);
}

logInfo = function(path){
	var infoLogger = infoLogger || new InfoLogger(path);
	infoLogger.callCertifica(path);
	infoLogger.googleAnalytics(path);
}

		

var inputFocus = function(e,o) {
	keyZoomIn.disable();
	keyZoomOut.disable();

	keyMove.disable();
	keyMoveCtrl.disable();
	keyMoveShift.disable();
	keyMoveUp.disable()
	keyMoveCtrlUp.disable();
	keyMoveShiftUp.disable();
}

var inputBlur = function(e,o) {

	keyZoomIn.enable();
	keyZoomOut.enable();

	keyMove.enable();
	keyMoveCtrl.enable();
	keyMoveShift.enable();

}

var mapDown = function() {
	keyMove.disable();
	keyMoveCtrl.disable();
	keyMoveShift.disable();
}

var mapOver = function() {
	keyMove.enable();
	keyMoveCtrl.enable();
	keyMoveShift.enable();
}

var _doClickSuggest = function doClickSuggest(e,streetName,streetNumber,comune,province,region){
	if (e == "select") {//TODO: rmv gf pls
		var elm = _suggestSelectedItem;
	}
	else {
		var elm = $E.getTarget(e);
		if ($D.hasClass(elm, 'moreItens')) {
				if (SuggestAddress) {
					SuggestAddress.getMoreItens(e);
				}
				return false;
	}
	}
	//console.log(elm)		
	if ($D.hasClass(elm,'childOff')){
		return false;
	}
	
	var inputElm = $D.get(_inputActive);

	var streetName = (streetName.length > 0) ? streetName + ', ' + streetNumber + ', ' : '';
	var comune = (comune.length > 0) ? comune + ', ' : '';
	var province = (province.length > 0) ? province + ', ' : '';
	var region = region || '';

	var in_keywords = new Array('in:', 'en:', 'cerca:', 'hasta:', 'to:', 'persona:', 'empresa:', 'actividad:');
	var result = new Array(2);
	var init = '';
	for (i=0; i < in_keywords.length ; i++) {
		if (inputElm.value.toLowerCase().indexOf(in_keywords[i])!= -1) {
			var aux = inputElm.value.substring(0, inputElm.value.toLowerCase().indexOf(in_keywords[i])) + 
				in_keywords[i] +
				inputElm.value.substring(inputElm.value.toLowerCase().indexOf(in_keywords[i]) + in_keywords[i].length);
			result = aux.split(in_keywords[i]);
			if (result.length > 1){
				init = YAHOO.lang.trim(result[0]) + ' ' + in_keywords[i] + ' ';
			} 
			break;
		} 
	}
	
	inputElm.value = init + streetName + comune + province + region;
	
	inputElm.focus();
		
	if (streetName.length > 0) {
		if (streetName.indexOf(', ')!= -1) {
			var startCursor = (streetName.indexOf(', ')+2) + init.length;
			var endCursor = (streetName.lastIndexOf(', ') +  + init.length);
			_setCursorToPosition(inputElm, startCursor, endCursor);
		}
	}
	Stage.suggestOnOff(null,{action: 'close'});
}

var _doClickCommune = function doClickCommune(e,streetName,streetNumber,comune,province,region){
	var elm = $E.getTarget(e);
	var inputElm = $D.get(_inputActive);
	
	var streetName = (streetName.length > 0) ? streetName + ', ' + streetNumber + ', ' : '';
	var comune = (comune.length > 0) ? comune + ', ' : '';
	var province = (province.length > 0) ? province + ', ' : '';
	var region = region || '';
	
	inputElm.value = streetName + comune + province + region;
	
	inputElm.focus();
		
	if (streetNumber) {
		var startCursor = parseInt(streetName.length);
		var endCursor = parseInt(startCursor+(streetNumber.length-2));
		_setCursorToPosition(inputElm, startCursor, endCursor);
	}
	
	Stage.suggestOnOff(null,{action: 'close'});
}

var _doClickBusiness = function doClickBusiness(e,businessName){
	var elm = $E.getTarget(e);
	var inputElm = $D.get(_inputActive);
	
	var businessName = businessName || '';
	inputElm.value = businessName;
	inputElm.focus();

	Stage.suggestOnOff(null,{action: 'close'});
}

var _doClickRegion = function doClickRegion(e,name,longitude,latitude){
	var nameRegion = name || null;
	var lonRegion = longitude || null;
	var latRegion = latitude || null;
	var zoomMap = 8;
	if (nameRegion && lonRegion && latRegion){
		setTimeout(function(){
			map.initFocus(new CPoint(lonRegion, latRegion), zoomMap);
			//bug 1957 - Quando grava este cookie sobrescreve o cookie de mi localidad
			//setCookie('loc',name+'@'+latRegion+','+lonRegion+','+zoomMap,365);
		},50);
	} else {
		//alert('error')
	}
	
	Stage.suggestOnOff(null,{action: 'close'});
}

var Locale = function Locale(){
	var _locId;
	var _ll;
	
	this.setLocId = function(locId){
		_locId = locId
	}
	this.setLongLat = function(lat, long){
		_ll = "" + lat + "," + long;
	}
	this.getParams = function(){
		return {"locId":_locId, "ll":_ll}
	}
}

var setLoc = function setLoc(locId,ll,target){
	if (!loc == false){//verifica se o ultimo local definido continua visível
		if($D.get('p' + loc)){
			$D.get('a' + loc).style.display = '';
			$D.get('p' + loc).className = 'off'
		}
		if(!cook == false){//verifica se o ultimo local definido foi cookie
			$D.get('aPlot' + loc).style.display = '';
			$D.get('pPlot' + loc).className = 'off'
		}
	}
	
	if(ll == "0,0"){
		loc = false;
		var current = $Get(target.id).firstChild.innerHTML;
		findAddressCenter(target.segment, target.number, current, ["javascriptFallBack", locId]);
		return
	}
	
	var localeName = $D.get('pPlot' + locId).innerHTML;
	var defMessage = "El mapa inicial exhibir&aacute la <strong>"+localeName+"</strong> la pr&oacute;xima vez en visites planos.cl";
	 
	//mensagem nova localidad
	$D.get('pPlot' + locId).innerHTML = defMessage;
	
	//só alterna esses exemplos se estiverem disponíveis na resultbar
	if($D.get('p' + locId)){
		$D.get('p' + locId).innerHTML = defMessage;//mensagem nova localidad
		$D.get('a' + locId).style.display = 'none';
		$D.get('p' + locId).className = 'loc';
	}
	
	$D.get('aPlot' + locId).style.display = 'none';
	$D.get('pPlot' + locId).className = 'loc';
	
	loc = locId;
	cook = true;
	
	var name = $D.get('name' + locId) ? $D.get('name' + locId).textContent : $D.get('namePlot' + locId).textContent;
	var zoom = map.getZoom();
	var cData = name + '@' + ll + ',' + zoom;
    var d = new Date();
    d.setTime(d.getTime() + 31536000000);
    var cExpires = "; expires=" + d.toGMTString();	
	setCookie('loc',cData,365);
}

var _setCursorToPosition = function setCursorToPosition(element,start,end) {
	if (element.setSelectionRange) {
		element.setSelectionRange(start,end);
	} else if (element.createTextRange) {
		var range = element.createTextRange();
		range.collapse(true);
		range.moveEnd("character",end);
		range.moveStart("character",start);
		range.select();
	}
};

var setSuggestOn = function setSuggestOn(action) {
	$D.replaceClass('suggestMessage','on','off');
	$D.replaceClass('suggestContent','off','on');
	$D.addClass('suggestOnBt','btActive');
	$D.addClass('suggestOffBt','off');
	$D.removeClass('suggestOnBt','off');
	
	if (action == 'close') {
		Stage.suggestOnOff(null,{action:'close'});
	} else {
		Stage.suggestOnOff(null,{action:'open'});
	}
};

var setSuggestOff = function setSuggestOff(eventInput) {
	$D.replaceClass('suggestContent','on','off');
	$D.replaceClass('suggestMessage','off','on');
	//$D.get('suggestMessage').innerHTML = 'Las sugerencias están desactivadas. Para habilitarlas, haga clic en "on".';
	$D.get('suggestMessage').innerHTML = 'Las sugerencias están desactivadas. Para habilitarlas, haz clic en "on".';
	$D.addClass('suggestOnBt','off');
	$D.removeClass('suggestOffBt','off');
	
	
	
	if (!eventInput) {
		Stage.suggestOnOff(null,{action:'mini'});
	} else {
		Stage.suggestOnOff(null,{action:'close'});
	}
};

var setSuggestOnOff = function(e,o) {
	var _o = o || {};
	var objAction = (_o.action);
	
	if(objAction == 'off'){
		setSuggestOff();
	} else {
		if ($D.get('suggestContent').innerHTML == '<!-- -->'){
			setSuggestOn('close');
		} else {
			setSuggestOn();	
		}
	}
	setCookie('suggest',objAction,365);
};

var getSuggestOnOff = function(type,args) {
	var eventInput = (args) ? args[0] : false;
	if(getCookie('suggest') == 'off'){
		setSuggestOff(eventInput);
		return false;
	} else {
		setSuggestOn();
		return true;
	}
};

var sliderTimer = 0;
var _clickRegiones = function clickRegiones(e){
	Stage.suggestOnOff(null,{action:'open'});
	
	if (getCookie('suggest') == 'off') {
		$D.addClass('suggestOffBt','btActive');
		$D.removeClass('suggestOnBt','btActive');
	} else {
		$D.addClass('suggestOnBt','btActive');
		$D.removeClass('suggestOffBt','btActive');
	}
	$D.replaceClass('suggestMessage','on','off');
	$D.replaceClass('suggestContent','off','on');
	$D.get('suggestMessage').innerHTML = '';
	
	if (isIE6) {
		//$D.addClass('sliderRegion','visOff');
		$D.setStyle('columnContent','border','1px solid #fff');
	}
	
	var request = new Request();
	request.getSync('suggestRegions.do','suggestContent');
	var slider = function(){
		Slider.newInstance('ctdRegion', 'sliderRegion');
		if (isIE6) {
			//$D.removeClass('sliderRegion','visOff');
			$D.setStyle('columnContent','border','1px solid #cfcfcf');
		}
	}
	
	clearTimeout(sliderTimer);
	sliderTimer = setTimeout(slider,50);
}

var _suggestNotFound = function suggestNotFound(type,args){
	if (args[0]) {
		Stage.suggestOnOff(null,{action:'mini'});	
	}
}

function doSearch(query, action, pg) {
	var leftResultQuery;
	var rightResultQuery;	
    var searchQuery = query;		
    var request = new Request();
	var center  = map.getCenter();
	var queryPg = '';
	if (pg){
		queryPg = '&pg=' + pg;
	}

	var ll = (center.getLatitude() + ',' + center.getLongitude());
    var uri = action + '?q=' + escape(searchQuery) + '&ll=' + ll + queryPg + '&rnd=' + Math.random() * (new Date()).getTime();
    
	if((searchQuery.indexOf('in:')!=-1) && (searchQuery.indexOf('en:')!=-1) && (searchQuery.indexOf('cerca:')!=-1)){
	   leftResultQuery = searchQuery.substring(0, searchQuery.indexOf(' en: '));	 
	   rightResultQuery = searchQuery.substring(searchQuery.indexOf(' en: ')+5, searchQuery.length);
	}else{
	   leftResultQuery = "";
	   rightResultQuery = searchQuery;
	}
	$D.removeClass('waitLeft','off');
	// $D.removeClass('waitRight','off');

    request.getAsync(uri, 'resultContent', escape(YAHOO.lang.trim(leftResultQuery)), escape(YAHOO.lang.trim(rightResultQuery)));
	Stage.suggestOnOff(null,{action: 'close'});
	Stage.handlerResize();
	bannersReload(query);
}

function findAddress(name, pg, nav) {
	var nav = (nav == undefined) ? false : nav;  
	if(!nav)searchResultsMas = true;
	
	if ($D.get(name).value == inputAddressValue){
		$D.get(name).value = '';
	}
	if ($D.get('suggestContent')) {
		$D.get('suggestContent').innerHTML = '<!-- -->';
	}
	clickHeatGroup = 'resultados';
//	document.title = "Planos.cl - " + $D.get(name).value + documentTitle;
    doSearch($D.get(name).value, 'findAddress.do',pg);
	logInfo('/busquedaDireccion')

}

function findAddressCenter(segmentId, number, addressJson, args) {
	cook = false;
	var ll = map.getCenter().getLatitude() + ',' + map.getCenter().getLongitude();	
	var target =  "javascript";
	// monta a url
	action = 'findAddressCenter.do';	
	uri = action + '?si=' + segmentId + '&nu=' + number + '&ad=' + addressJson;

	// verifica requisição
	if (requestManager['findAddressCenter']) {
		requestManager['findAddressCenter'].abort();
	}
	// faz a requisição
	requestManager['findAddressCenter'] = new Request();
	
	if(args && args.length>0){
		target = args[0];
		requestManager['findAddressCenter'].createLocale();
		requestManager['findAddressCenter'].getLocale().setLocId(args[1]);
	}
	
	requestManager['findAddressCenter'].getAsync(uri, target, null);
}

function getAddress(value, pg, action){
	Stage.tabNav(null,{label: 'address'});

	if($D.get('inputAddress')){
		$D.get('inputAddress').value = value;
		$D.replaceClass('inputAddress','inputBlur','inputFocus')	
	}
	if (action != 'stop'){
		findAddress('inputAddress', pg, true);
	}

}

function findBusiness(what, where, pg) {    
	var query = '';
	
	clickHeatGroup = 'resultados';
	
	if (($D.get(what).value) && ($D.get(what).value == inputBusinessValue)){
		$D.get(what).value = '';
	}
	
	if (($D.get(where).value) && ($D.get(where).value == inputBusinessInValue)){
		$D.get(where).value = '';
	}
	

	if ($D.get(what).value){
		query = $D.get(what).value;
		if (($D.get(what).value.toLowerCase().indexOf('in:') == -1) && 
			($D.get(what).value.toLowerCase().indexOf('en:') == -1) && 
			($D.get(what).value.toLowerCase().indexOf('cerca:') == -1)) {
    	    query += ' en: ';
    	}
		if ($D.get(what).value == inputBusinessValue){
			$D.get(what).value = '';
		}
    }

    if ($D.get(where).value) {
    	if ($D.get(what).value) {
        	query += $D.get(where).value;
        }else{
        	document.title = "Planos.cl - " + where + documentTitle;  
        	doSearch($D.get(where).value, 'findAddress.do', pg);	
        	return;
        }	
    }   

    if ($D.get('suggestContent')) {
		$D.get('suggestContent').innerHTML = '<!-- -->';
	}
//    document.title = "Planos.cl - " + what + " en " + where + documentTitle;
    doSearch(query, 'findBusiness.do', pg);
	logInfo('/busquedaServicio');
	
	if($D.hasClass('leftAd', 'on active')){
		Stage.leftAdAction();	
	}
	
}

function getBusiness(what, where, pg, action){
	var operator = "en:";
	if ($D.get('inputAddress')){
		var addressValue = $D.get('inputAddress').value;
		if (addressValue != null && addressValue != '' && addressValue != inputAddressValue){
			if (addressValue.toLowerCase().indexOf('in:') != -1){
				operator = "in:";
			}else if (addressValue.toLowerCase().indexOf('en:') != -1){
				operator = "en:";
			}else if (addressValue.toLowerCase().indexOf('cerca:') != -1){
				operator = "cerca:";
			}
		}
	}
	if (what){
		$D.get('inputBusiness').value = what;
		if ($D.get('inputAddress')) {
			$D.get('inputAddress').value = what;
			$D.replaceClass('inputAddress','inputBlur','inputFocus');
		}		
	}
	if (where){
		if ($D.get('inputAddress')) {
			$D.get('inputAddress').value += " "+ operator +" " + where;
		}
		$D.get('inputBusinessIn').value = where;
	}
	if (action != 'stop'){
		findBusiness('inputBusiness', 'inputBusinessIn', pg);
	}
}

function getRoute(fromValue, toValue){
	Stage.tabNav(null,{label: 'route'});

    $D.get('inputRoute').value = fromValue;
    $D.replaceClass('inputRoute','inputBlur','inputFocus');

    $D.get('inputRouteTo').value = toValue;
    $D.replaceClass('inputRouteTo','inputBlur','inputFocus');
	
    findRoute('inputRoute', 'inputRouteTo');
}

function changeRouteType() {
	var routeVal = $D.get('radioCaminando').checked ? '0' : $D.get('radioDirigiendo').checked ? '1' : '1';
	route = routeVal;
	findRoute('inputRoute', 'inputRouteTo', routeVal);
}



/*
 * Efetua busca de uma rota com base
 * nos parametros from e to
 */
function findRoute(from, to, routeVal) {
    var fromVal;
    var toVal;
    var address;
    if ($D.get(from).value == inputRouteValue){
		fromVal = '';
	}else{
	    fromVal = $D.get(from).value;
	}
	
	if ($D.get(to).value == inputRouteToValue){
		toVal = '';
	}else{
		toVal = $D.get(to).value;
	}

	clickHeatGroup = 'resultados';
	
	if (fromVal == '' && toVal== '' && $D.get("inputAddress").value != ''){		
		address = $D.get("inputAddress").value;
		if (address.indexOf("hasta:") > 0){
			fromVal = address.substr(0,address.indexOf("hasta:"));
			toVal = address.substr(address.indexOf("hasta:")+6);
		}else if (address.indexOf("to:") > 0){
			fromVal = address.substr(0,address.indexOf("to:"));
			toVal = address.substr(address.indexOf("to:")+3);
		}
	}

	if ($D.get('suggestContent')) {
		$D.get('suggestContent').innerHTML = '<!-- -->';
	}
//	document.title = "Planos.cl - Ruta de " + fromVal + " para " + toVal + documentTitle;
    router.findRoute({
    	"from": fromVal,
    	"to": toVal,
		"route": routeVal 
	});

    logInfo('/busquedaRuta');
	$D.removeClass('waitLeft','off');
	
	bannersReload(fromVal + 'to' + toVal);
	if($D.get('suggest')){
		$D.get('suggest').className = 'line';	
	}
}

/*
 * Atualiza o permlink
 */
function updatePermlink(zoom, center) {
	z = zoom;
	ll = center._latitude + ',' + center._longitude;
}

/*
 * Atualiza as categorias do explorer qdo houver movimento;
 */ 


function abortRequests(){
	return
}

/*
 * Atualiza as photos do flickr se estiverem habilidatas
 */
function updateMapFeature(feature, zoomLevel, southWestPoint, northEastPoint) {

	if (requestManager[feature]) {
		requestManager[feature].abort();
	}

	//if(isFlickrDisabled()) return;
	//markerManager.update();

	// recupera as coordenadas
	var southtLL = southWestPoint.getLatitude() + ',' + southWestPoint.getLongitude();
	var nortLL = northEastPoint.getLatitude() + ',' + northEastPoint.getLongitude();
	
	// recpera a proporção das imagens
	var proportion = map.getProportion();
	
	// monta a url	
	var action = 'flickr.do';	
	var uri = action + '?sll=' + southtLL + '&nll=' + nortLL + '&zl=' + zoomLevel + '&pp=' + proportion[0] + ";" + proportion[1];
	
	// faz a requisição
	requestManager[feature] = new Request();
  	requestManager[feature].getAsync(uri, 'javascript', null);

}

function isMapFeatureEnabled(feature) {
	return mapFeatures[feature];	
}

function checkMapFeature(e,o) {
	var _o = o || {};
	var _label = _o.label;
	
	mapFeatures[_label] = true;
	updateMapFeature('flickr', map.getZoom(), map.getSouthWest(), map.getNorthEast());

	
	if($D.get(_label).checked){
		markerManager.showType(-100)	
		//enableMapFeature(_label);			
	} else {
		markerManager.hideType(-100)
		//disableMapFeature(_label);
	}
	
	
	
}

function enableMapFeature(feature) {

	if($D.get('flickr').checked = true){
		mapFeatures[feature] = true;
	
		updateMapFeature('flickr', map.getZoom(), map.getSouthWest(), map.getNorthEast());
	
		var enableFlickr = $D.getElementsByClassName('plotFlickr', 'div', 'map_cntLayers');
	
		for (i=0;i<enableFlickr.length;i++){
			if ($D.hasClass(enableFlickr[i],'off')){
				$D.removeClass(enableFlickr[i], 'off');
			}
			
		}
	
		enableFlickr = null;
	}
} 
	
function disableMapFeature(feature) {
	mapFeatures[feature] = false;

	var disableFlickr = $D.getElementsByClassName('plotFlickr', 'div', 'map_cntLayers');

	for (i=0;i<disableFlickr.length;i++){
		if (!$D.hasClass(disableFlickr[i],'off')){
			$D.addClass(disableFlickr[i], 'off');
			
		}
	}

	disableFlickr = null;
};

	

/*
 * Atualiza o miniMapa. Sincroniza a área do miniMapa com a área do mapa
 */
function updateMiniMap() {
	
	if (updateMiniMapLock) {
		updateMiniMapLock = false;
		return false;
	}
	
	var center = map.getCenter();
	var zoom = map.getZoom() + 3;
	
	if (zoom > 15) zoom = 15;
	
	if (minimap) {
		updateMapLock = true;
		minimap.initFocus(center, zoom);
	}
}

/*
 * Atualiza o mapa. Sincroniza a área do mapa com a área do miniMapa
 */
function updateMap() {

	if (updateMapLock) {
		updateMapLock = false;
		return false;
	}

	var center = minimap.getCenter();
	var zoom = minimap.getZoom() - 3;
	var mapUpdate = null;	

	updateMiniMapLock = true;	
	if (zoom < 0) {
		updateMapLock = true;
		map.setFocus(center, zoom + 1);
		minimap.setFocus(center, zoom + 4);
	} else {		
		map.setFocus(center, zoom);
	}
}

/*
 * Habilita o icone de lupa
 */
function onMouseOver() {	
	$D.setStyle("zoomImg", "display", "block");
}

/*
 * Desabilita o icone de lupa 
 */
function onMouseOut() {	
	$D.setStyle("zoomImg", "display", "none");
}

/*
 * Método que calcula as coordenadas do mouse e atualiza a área de seleção
 */
function onMouseMove(e) {

	var leftWidth = 0;

	if ($D.get('left')) {
		leftWidth = $D.get('left').clientWidth;
	}

	mouseX = e.clientX - (leftWidth + 26);
	mouseY = e.clientY - 122;
	var distance = 0;
	
	if (navigator.appName == 'Netscape') {
		distance = 2;
	}
	
	// atualiza o cursor
	
	$D.setStyle("zoomImg", "left", (mouseX + distance) + "px");		
	$D.setStyle("zoomImg", "top", (mouseY + distance) + "px");
	
	if (selectionMapEnable) {
		$D.setStyle("mapSelection", "display", "block");
	} else {		
		mouseXClick = mouseX;
		mouseYClick = mouseY;
	}
	
	var X = mouseX - mouseXClick;
	var Y = mouseY - mouseYClick;
	
	var x1, y1, x2, y2;
	
	if (X >= 0) {
		x1 = mouseXClick;
		x2 = X;
	} else {		
		x1 = mouseX;
		x2 = X * (-1);
	}
	
	if (Y >= 0) {
		y1 = Y;
		y2 = mouseYClick;
	} else {		
		y1 = Y * (-1);
		y2 = mouseY;
	}
	
	updateSelectionArea(new CPoint(x1, y1), new CPoint(x2, y2));
	
	if (selectionMapEnable) {
		selectionSWPoint = new CPoint(x1, y1);
		selectionNEPoint = new CPoint(x2, y2);
	}	
}

/*
 * Inicio da seleção da área de zoom
 */
function onSelectionStart() {	
	mouseXClick = mouseX;
	mouseYClick = mouseY;
		
	selectionSWPoint = new CPoint(mouseXClick, mouseYClick);
	selectionNEPoint = new CPoint(mouseXClick, mouseYClick);	
		
	selectionMapEnable = true;
}
 
/*
 * Fim da seleção da área de zoom
 */ 
function onSelectionEnd() {
	
	$D.setStyle("mapBlock", "display", "none");	
	$D.setStyle("mapSelection", "display", "none");
	$D.setStyle("zoomImg", "display", "none");
	
	calculateSelection();
	selectionMapEnable = false;
}

/*
 * Inicio do Drag do MiniMapa
 */
function onDragStartMiniMap(e) {
	dragMiniMap = true;
	var x = e.clientX - ($D.getViewportWidth() - 168);
	var y = e.clientY - ($D.getViewportHeight() - 146);
	gapDragCenterX = x - 50;
	gapDragCenterY = y - 34;
}

/*
 * Fim do Drag do MiniMapa
 */
function onDragEndMiniMap(e) {
	
	if (!dragMiniMap) return false;
	
	dragMiniMap = false;
	var centerID = "mapMiniContainerCenter";
	$D.setStyle(centerID, "left", "50px");
	$D.setStyle(centerID, "top", "34px");
	
	// centro
	centerMiniMapX += 21;
	centerMiniMapY += 18;
	
	var point = minimap.pixelToLatLng(new CPoint(centerMiniMapX, centerMiniMapY));
	
	if (!isNaN(point.getLatitude())) {
		minimap.setCenter(point);
	}
	
}

/*
 * Drag do MiniMapa
 */
function onDragCenterMiniMap(e) {
	if (!dragMiniMap) return false;

	var centerID = "mapMiniContainerCenter";
	centerMiniMapX = e.clientX - ($D.getViewportWidth() - 168);
	centerMiniMapY = e.clientY - ($D.getViewportHeight() - 146);
	
	// ajuste relativo a posição
	centerMiniMapX -= gapDragCenterX;
	centerMiniMapY -= gapDragCenterY;
	
	// ajustes para nao sair fora do minimapa
	centerMiniMapX = centerMiniMapX >= 0 ? centerMiniMapX : 0;
	centerMiniMapY = centerMiniMapY >= 0 ? centerMiniMapY : 0;
	centerMiniMapX = centerMiniMapX <= 97 ? centerMiniMapX : 97;
	centerMiniMapY = centerMiniMapY <= 67 ? centerMiniMapY : 67;
	
	// posiciona
	$D.setStyle(centerID, "left", centerMiniMapX + "px");
	$D.setStyle(centerID, "top", centerMiniMapY + "px");	
}
/*
 * Ferramenta de zoom. Habilita Div com suporte a "seleção"
 */
function zoomTool() {
	if ($D.getStyle("mapBlock", "display") == "block") {
		// "esconde" o div transparente 
		$D.setStyle("mapBlock", "display", "none");
	}
	else {
		// "exibe" o div transparente
		$D.setStyle("mapBlock", "display", "block");
		$D.setStyle("mapBlocker", "width", $D.get('map').clientWidth +'px');
		$D.setStyle("mapBlocker", "height", $D.get('map').clientHeight +'px');
	}
}

/*
 * Atualiza a caixa de seleção
 */
function updateSelectionArea(southWestPoint, northEastPoint) {

	$D.setStyle("mapSelection", "left", (southWestPoint.getX() + "px"));
	$D.setStyle("mapSelection", "top", (northEastPoint.getY() + "px"));
	$D.setStyle("mapSelection", "width", (northEastPoint.getX() + "px"));
	$D.setStyle("mapSelection", "height", (southWestPoint.getY() + "px"));
}

/*
 * Calcula a área do mapa a ser focada
 */
function calculateSelection() {

	var swx = selectionSWPoint.getX();
	var nex = selectionNEPoint.getX();
	var ney = selectionNEPoint.getY();
	var swy = selectionSWPoint.getY();
	var xPx = (nex / 2) + swx;
	var yPx = (swy / 2) + ney;
	
	if ((swx != nex) && (swy != ney)) {	
		nex += swx;
		swy += ney;
	} else {
		xPx = swx;
		yPx = swy;
	}	
			
	var centerPoint = map.pixelToLatLng(new CPoint(xPx, yPx));
	var swPoint = map.pixelToLatLng(new CPoint(swx, swy));			
	var nePoint = map.pixelToLatLng(new CPoint(nex, ney));
	
	/*
	alert("swPoint.lng" + swPoint.getLongitude() + ";swPoint.lat" + swPoint.getLatitude());
	alert("nePoint.lng" + nePoint.getLongitude() + ";nePoint.lat" + nePoint.getLatitude());
	alert("centerPoint.lng" + nePoint.getLongitude() + ";centerPoint.lat" + nePoint.getLatitude());
	*/
			
	map.setFocusByBoundary(centerPoint, swPoint, nePoint);	
}

/*
 * Oculta o MiniMapa
 */
function hideMiniMap() {
	$D.get("mapMini").className = "off";
	$D.removeClass('btnShowMiniMap','off');
}

/*
 * Exibe o MiniMapa
 */
function showMiniMap() {
	$D.get("btnShowMiniMap").className = "off";
	$D.removeClass('mapMini','off');
}


function infoTabNav(el) {
	
	var elA = el.parentNode.parentNode.parentNode.getElementsByTagName('li');
	var elRel = el.parentNode.parentNode.getAttribute('rel');
	var elDivs = el.parentNode.parentNode.parentNode.parentNode.parentNode;
	
	$D.replaceClass($D.getElementsByClassName('divList infoTabContainer','div',elDivs)[0], 'infoTabContainer', 'off');
	$D.replaceClass($D.getElementsByClassName('divList','div',elDivs)[elRel], 'off', 'infoTabContainer');
	//$D.getElementsByClassName('divList infoTabContainer','div',elDivs)[0].className = 'divList off';
	//$D.getElementsByClassName('divList','div',elDivs)[elRel].className = 'divList infoTabContainer';
	
	for (i=0;i<elA.length;i++){
		if (elA[i].className != 'off'){
			elA[i].className = '';
		}
	}

	el.parentNode.parentNode.className = 'active';
}

function infoTabLeft(el){
	if(el.className == 'moreLeft'){
		var elA = el.parentNode.getElementsByTagName('li');
		var elALength = elA.length;
		var firstOpen;
	
		// Definindo primeira aba aberta
		var i;
		for (i=0;i<elALength;i++){
			if ( elA[i].className != 'off' ){
				firstOpen = i;
				break;
			}
		}

		// Verifica se existe item anterior
		if (firstOpen == 1){
			el.className = 'moreLeftDisabled';
		} else {
			if (!elA[firstOpen - 2]) {
				el.className = 'moreLeftDisabled';
			}
		}

		//Se o item a ocultar for o último, abre o anterior
		if (elA[firstOpen + 3].className == 'active') {
			infoTabNav(elA[firstOpen + 2].getElementsByTagName('em')[0]);
		}
		
		// Ocultando item à direita
		elA[firstOpen + 3].className = 'off';

		// Abre o item à esquerda
		elA[firstOpen - 1].className = '';
		
		//habilita o clique à Direita
		el.parentNode.getElementsByTagName('span')[1].className = 'moreRight';

	}	
}
function infoTabRight(el){
	
	if(el.className == 'moreRight'){
	
		var elA = el.parentNode.getElementsByTagName('li');
		var elALength = elA.length;
		var lastOpen;;
		
		// Definindo última aba aberta
		var i;
		for (i=0;i<elALength;i++){
			if ( elA[i].className != 'off' ){
				lastOpen = i;
			}
		}

		// Verifica se existe próximo item
		if (!elA[lastOpen + 2]) {
			el.className = 'moreRightDisabled';
		}

		//Se o item a ocultar for o 1º, abre o próximo
		if (elA[lastOpen - 3].className == 'active') {
			infoTabNav(elA[lastOpen - 2].getElementsByTagName('em')[0]);
		}

		// Ocultando item à esquerda
		elA[lastOpen - 3].className = 'off';

		// Abre o item à direita
		elA[lastOpen + 1].className = '';
		
		//habilita o clique à Esquerda
		el.parentNode.getElementsByTagName('span')[0].className = 'moreLeft';

	}
}

function infoTabPicsRight(el){
	
	var elLis = el.parentNode.getElementsByTagName('li');
	var lastOpen;
		
	//definindo a última foto aberta
	var i;
	for (i=0;i<(elLis.length);i++){
		if ( elLis[i].className != 'off' ){
			lastOpen = i;
		}
	}
	
	// Verifica se existe próximo item
	if (!elLis[lastOpen + 2]) {
		el.className = 'off';
	}
	
	// Ocultando item à esquerda
	elLis[lastOpen - 1].className = 'off';

	// Abre o item à direita
	elLis[lastOpen + 1].className = '';
	
	//habilita o clique à Esquerda
	el.parentNode.getElementsByTagName('p')[0].className = 'picLeft';
	
}

function infoTabPicsLeft(el){
	
	var elLis = el.parentNode.getElementsByTagName('li');
	var firstOpen;
		
	//definindo a foto aberta
	var i;
	for (i=0;i<(elLis.length);i++){
		if ( elLis[i].className != 'off' ){
			firstOpen = i;
			break;
		}
	}

	// Verifica se existe próximo item
	if (firstOpen == 1){
		el.className = 'off';
	} else {
		if (!elLis[firstOpen - 1]) {
			//el.className = 'off';
		}
	}

	// Ocultando item à direita
	elLis[firstOpen + 1].className = 'off';

	// Abre o item à esquerda
	elLis[firstOpen - 1].className = '';

	//habilita o clique à Esquerda
	el.parentNode.getElementsByTagName('p')[1].className = 'picRight';

}

function showPreview(el, type){
	var container = el.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
	if (type == 'photo'){
		var previewDiv = $D.getElementsByClassName('photo', 'div', container)[0];
		var imgPreview = previewDiv.getElementsByTagName('img')[0];
		var elLis = previewDiv.getElementsByTagName('li');
		var relElm = el.getAttribute('rel');
		var preview = $D.getElementsByClassName('photoLeft', 'p', container)[0];
		var next = $D.getElementsByClassName('photoRight', 'p', container)[0];
		$D.removeClass(previewDiv, 'off');
		
		for (var i=0;i<elLis.length;i++){
			elLis[i].className = 'off';
		}
		$D.removeClass(elLis[relElm-1],'off');
		
		if (relElm > 1){
			$D.removeClass(preview,'photoLeftDisabled');
		} else {
			$D.addClass(preview,'photoLeftDisabled');
		}
		
		if (relElm < elLis.length){
			$D.removeClass(next,'photoRightDisabled');
		} else {
			$D.addClass(next,'photoRightDisabled');
		}
	}
}

function hidePreview(obj, type){
	/*var container = obj.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
	
	if (type == 'photo'){
		var previewDiv = $D.getElementsByClassName('photo', 'div', container)[0];
		var imgPreview = previewDiv.getElementsByTagName('img')[0];
		$D.addClass(previewDiv, 'off');
		//imgPreview.src = "#";		
	}*/
	$D.addClass(obj.parentNode, 'off');
	
}

function previewPhotoPagination(el,action){
	
	var container = el.parentNode;
	var elLis = container.getElementsByTagName('li');
	var preview = $D.getElementsByClassName('photoLeft', 'p', container)[0];
	var next = $D.getElementsByClassName('photoRight', 'p', container)[0];

	var lastOpen;
	
		
	for (var i=0;i<elLis.length;i++){
		if ( elLis[i].className != 'off' ){
			lastOpen = i;
			break;
		}
	}
	
	if (action == 'left') {
		if ((lastOpen-1) <= 0) {
			$D.addClass(preview,'photoLeftDisabled');	
		} else {
			$D.removeClass(preview,'photoLeftDisabled');
		}
		
		if (lastOpen > 0) {
			$D.removeClass(next,'photoRightDisabled');
			elLis[lastOpen].className = 'off';
			elLis[lastOpen - 1].className = '';			
		} 
		
	} else if (action == 'right'){
		if ((lastOpen+1) >= (elLis.length-1)) {
			$D.addClass(next,'photoRightDisabled');	
		} else {
			$D.removeClass(next,'photoRightDisabled');
		}
		
		if (lastOpen < (elLis.length-1)) {
			$D.removeClass(preview,'photoLeftDisabled');
			elLis[lastOpen].className = 'off';
			elLis[lastOpen + 1].className = '';			
		} 
	}
	
}


function sliderRight(el) {
	_el = $D.get(el);
	var uls = _el.parentNode.parentNode.getElementsByTagName('ul');
	
	var lastOpen;
	
	//definindo a última coluna aberta
	for (var i=0;i<(uls.length);i++){
		
		if ($D.hasClass(uls[i],'on')){
			lastOpen = i;
		}
	}

	// Verifica se existe próximo item
	if (!uls[lastOpen + 2]) {
		el.className = 'right-disable';
	}
	
	if (uls[lastOpen + 1]) {
		// Ocultando item à esquerda
		$D.replaceClass(uls[lastOpen - 1],'on','off');
		
		// Abre o item à direita
		$D.replaceClass(uls[lastOpen + 1],'off','on');
		//$D.get('column' + (lastOpen + 1)).className = 'content on'

		//habilita o clique à Esquerda
		el.parentNode.getElementsByTagName('div')[0].className = 'left';
	}
}

function sliderLeft(el) {
	var uls = el.parentNode.parentNode.getElementsByTagName('ul');
	var firstOpen;

	//definindo a primeira coluna aberta
	for (var i=0;i<(uls.length);i++){
		if ( $D.hasClass(uls[i],'on') ){
			firstOpen = i;
			break;
		}
	}
		
	if (firstOpen > 0){
		
		// Verifica se existe próximo item
		if (firstOpen == 1){
			el.className = 'left-disable';
		}else{
			if(!uls[firstOpen - 2 ]) {
				el.className = 'left-disable';
			}
		}
	
		if (uls[firstOpen - 1]) {
			// Ocultando item à esquerda
			//uls[firstOpen + 1].className = 'content off';
			$D.replaceClass(uls[firstOpen + 1],'on','off');
			
			// Abre o item à direita
			//uls[firstOpen - 1].className = 'content';
			$D.replaceClass(uls[firstOpen - 1],'off','on');
			
			//habilita o clique à Esquerda
			el.parentNode.getElementsByTagName('div')[1].className = 'right';
		}
	}
}

Stage.regionOnOff = function regionOnOff(e,o){
	$E.stopPropagation(e);	
	if(!$D.hasClass(this.parentNode,'active')){
		$E.stopPropagation(e);	
		$D.addClass(this.parentNode,'active')
		$E.addListener($D.get('regions'),'click',Stage.regionOff);
		$E.addListener($D.get('regionOnOff'),'click',Stage.regionOff);
		$E.addListener(document,'click',Stage.regionOff);
		$E.addListener($D.get('sliderRegion'),'click',Stage.regionOn);
	}
}
Stage.regionOff = function() {
	$D.get('region').className = '';
	$D.get('regions').scrollTop = 0;
	$E.removeListener($D.get('regions'),'click',Stage.regionOff);
	$E.removeListener($D.get('regionOnOff'),'click',Stage.regionOff);
	$E.removeListener(document, 'click', Stage.regionOff);
	$E.removeListener($D.get('sliderRegion'),'click',Stage.regionOn);
}
Stage.regionOn = function(e,o) {
	$E.stopPropagation(e);
}

Stage.regionSliderUp = function(e,o) {
	$D.get('regions').scrollTop -= 15;
	
	if($D.get('sliderRegionDown').className == 'down-disable') {
		$E.addListener($D.get('sliderRegionDown'),'click',Stage.regionSliderDown);
		$D.get('sliderRegionDown').className = 'down';
	}
	
	var sTop = $D.get('regions').scrollTop;
	var sHeight = $D.get('regions').scrollHeight;
	var cHeight = $D.get('regions').clientHeight;
	
	if(sTop == 0) {
		$E.removeListener($D.get('sliderRegionUp'),'click',Stage.regionSliderUp);
		$D.get('sliderRegionUp').className = 'up-disable';
	}
};

Stage.regionSliderDown = function(e,o) {
	
	$D.get('regions').scrollTop += 15;
	
	if($D.get('sliderRegionUp').className == 'up-disable') {
		$E.addListener($D.get('sliderRegionUp'),'click',Stage.regionSliderUp);
		$D.get('sliderRegionUp').className = 'up';
	}
	
	var sTop = $D.get('regions').scrollTop;
	var sHeight = $D.get('regions').scrollHeight;
	var cHeight = $D.get('regions').clientHeight;
	
	if(cHeight + sTop >= sHeight) {
		$E.removeListener($D.get('sliderRegionDown'),'click',Stage.regionSliderDown);
		$D.get('sliderRegionDown').className = 'down-disable';
	}
};

function removeAcento(str) {
	var strComAcento = "åäâàãáÁÂÄÀÃéêëèÉÊËÈíîïìÍÎÏÌóôõöòÓÔÕÒÖüúùûÜÙÚÛÇçñÑ";
	var strSemAcento = "aaaaaaAAAAAeeeeEEEEiiiiIIIIoooooOOOOOuuuuUUUUCcnN";
	
	var result = str;
	for (var i = 0; i < str.length; i++) {
		var posAcento = strComAcento.indexOf(str.charAt(i));
	    if (posAcento >= 0) {
	    	result = result.replace(strComAcento.charAt(posAcento), strSemAcento.charAt(posAcento));
	    }
	}
	return result;
}

function removeKeywords(str){
	var ret = str;
	var in_keywords = new Array('in:', 'en:', 'cerca:');
	for (var i=0; i < in_keywords.length ; i++) {
		ret = ret.replace(in_keywords[i],'');
	}
	return ret;
}

function removeSpecialChars(str){
	var ret = str;
	var coma = new RegExp(',', 'g');
	ret = ret.replace(coma,'');
	ret = YAHOO.lang.trim(ret);
	return ret;
}

function resultHighlight(input){
	var query = removeKeywords(input);
	query = removeSpecialChars(query);

	var prefix= '<>';
	var sufix = '</>';
	var prefixSpan = '<span class="highlight">';
	var sufixSpan = '</span>';
	var space = ' ';
	var coma = ', ';
	var prefixHighlight = new RegExp(prefix, 'g');
	var sufixHighlight  = new RegExp(sufix, 'g');
	var spaceHighlight  = new RegExp(sufixSpan+' '+prefixSpan, 'g');
	var comaHighlight   = new RegExp(sufixSpan+', '+prefixSpan, 'g');

	var word = query.split(/\s/g);
	var elms = $D.getElementsByClassName('resultElement');

	for (var i = 0; i < elms.length; i++) {
		var element = elms[i].innerHTML;
		var elementStr = element;
		for (var x = 0; x < word.length; x++) {
			var posIni = 0;
			var posIndex = removeAcento(elementStr.toLowerCase()).indexOf(removeAcento(word[x].toLowerCase()));
			while (posIndex >= 0) {
				if ((posIndex < 2) || (elementStr.substring(posIndex-2, posIndex) != prefix)) {
					elementStr = elementStr.substring(posIni, posIndex)+prefix+elementStr.substring(posIndex, posIndex+word[x].length)+sufix+elementStr.substring(posIndex+word[x].length);
				}
				posIndex = removeAcento(elementStr.toLowerCase()).indexOf(removeAcento(word[x].toLowerCase()), (posIndex+word[x].length+prefix.length+sufix.length));
				if (posIndex == (prefix.length+sufix.length)) {
					break;
				}
			}
		}
		// troca o prefixo e o sufixo pela tag que representa o highlight
		if ((elementStr.indexOf(prefix) >= 0) || (elementStr.indexOf(sufix) >= 0)){
			elementStr = elementStr.replace(prefixHighlight, prefixSpan);
			elementStr = elementStr.replace(sufixHighlight, sufixSpan);
			// faz o tratamento para efetuar o highlight na virgula e espacos
			elementStr = elementStr.replace(spaceHighlight, space);
			elementStr = elementStr.replace(comaHighlight, coma);
		} else {
			elementStr = element;
		}
		elms[i].innerHTML = elementStr;
	}
}

function plotMouseOver(id) {
	if ($D.get('infoWindowPlot' + id)) {
		$D.addClass('infoWindowPlot' + id, 'hover');
		var object = $D.get('infoWindowPlot' + id);
		$D.addClass(object.parentNode, 'hoverZindex')
	}
}
function plotMouseOut(id) {	
	if ($D.get('infoWindowPlot' + id)) {
		$D.removeClass('infoWindowPlot' + id, 'hover');
		var object = $D.get('infoWindowPlot' + id);
		$D.removeClass(object.parentNode, 'hoverZindex')
	}
}


Stage.routeChange = function() {
	var input1 = $D.get('inputRoute').value;
	var input2 = $D.get('inputRouteTo').value;
	
	if ( input1 != inputRouteValue ) {
		$D.get('inputRouteTo').value = input1;
		$D.replaceClass($D.get('inputRouteTo'),'inputBlur','inputFocus')
	} else {
		$D.get('inputRouteTo').value = inputRouteToValue;
		$D.replaceClass($D.get('inputRouteTo'),'inputFocus','inputBlur')
	}
	
	if ( input2 != inputRouteToValue ) {
		$D.get('inputRoute').value = input2;
		$D.replaceClass($D.get('inputRoute'),'inputBlur','inputFocus')
	} else {
		$D.get('inputRoute').value = inputRouteValue;
		$D.replaceClass($D.get('inputRoute'),'inputFocus','inputBlur')
	}
}
	
	
Stage.leftAdAction = function(){


	if (flash) {
	
		if (!$D.hasClass('leftAd', 'active')) {
			$D.addClass('leftAd', 'active');
			$D.get('leftAdBanner').height = '237px';
            try {
                flash.maximize();
            } catch(e) {
                //console.log(e);
            }

		}
		else {
			$D.removeClass('leftAd', 'active');
			$D.get('leftAdBanner').height = '52px';
            try {
                flash.minimize();
            } catch(e) {
                //console.log(e);
            }

		}
		
		Stage.handlerResize();
	}
}

function queryString(param,url){
	
	if (!url) {
		url = window.location.href;
	};
	
	if (param) {
		param = param.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
		var regexS = "[\\?&]"+param+"=([^&#]*)";
		var regex = new RegExp( regexS );
		var results = regex.exec( url );
		if( results == null )
		return "";
		else
		return results[1];
	}
}

function _initZoomControl() {
	var SNAP_HEIGHT = 8;
	var MAX_ZOOM_LEVEL = 17;

	var minY = parseInt($D.getStyle('dragTop', 'height'));
	var tMod = minY % SNAP_HEIGHT;
	var maxY = parseInt((SNAP_HEIGHT*MAX_ZOOM_LEVEL)+minY);
	var clickDif = 0;
	var y = 0;
	var zLevel = -1;

	$D.get('drag').onselectstart = function(){ return false; };
  	$D.get('drag').unselectable = "on";
  	$D.get('drag').style.MozUserSelect = "none";


	var _move = function(e) {
		y = (e.clientY - clickDif);
		if(y < minY) { y = minY; }
		if(y > maxY) { y = maxY; }
		$D.get('drag').style.top = ((y - (y % SNAP_HEIGHT)) + tMod) + 'px';
	};
	
	var _drop = function(e) {
		$E.removeListener(document, 'mousemove', _move);
		$E.removeListener(document, 'mouseup', _drop);
		var z = ((y - (y % SNAP_HEIGHT)) - (minY-tMod)) / SNAP_HEIGHT;
		if(z != zLevel) {
			zLevel = z;
			map.setZoom(z);
		}
	};

	$E.on('drag', 'mousedown', function(e) {
		var dragY = $D.getY('drag');
		clickDif = dragY - parseInt($D.getStyle('drag', 'top')) + ($E.getPageY(e) - dragY);
		y = (e.clientY - clickDif)
		$E.on(document, 'mousemove', _move);
		$E.on(document, 'mouseup', _drop);
	});
	
	$E.on('dragBody', 'click', function(e) {
		var dragY = $D.getY('dragBody')
		clickDif = dragY - parseInt($D.getStyle('drag', 'top')) + ($E.getPageY(e) - dragY);
		y = ((e.clientY - this.clientHeight)+SNAP_HEIGHT);
		if(y < minY) { y = minY; }
		if(y > maxY) { y = maxY; }
		$D.get('drag').style.top = ((y - (y % SNAP_HEIGHT)) + tMod) + 'px';
		var z = ((y - (y % SNAP_HEIGHT)) - (minY-tMod)) / SNAP_HEIGHT;
		if(z != zLevel) {
			zLevel = z;
			map.setZoom(z);
		}
	});
};

var activeControl = function activeControl(b, action){
	var element=$D.get(b).className;
	var a;
	if(action=='active'){
		a="active";
	}else if(action == "inactive"){
		a="";
	}else if(action == "mini"){
		a="mini";
	}else if(action == "both"){
		a="active mini";
	}else if(element==""){
        a="active";
	}else{
        a="";
	}
	var c=$D.get(b);
	c.className=a;
	Stage.handlerResize();
}

function setCookie(c_name, value, expiredays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie = c_name + "=" + escape(value) +
                      ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
}

function getCookie(c_name) {
    if (document.cookie.length > 0) {
        c_start = document.cookie.indexOf(c_name + "=");
        if (c_start != -1) {
            c_start += c_name.length + 1;
            c_end = document.cookie.indexOf(";", c_start);
            if (c_end == -1) c_end = document.cookie.length;
            return unescape(document.cookie.substring(c_start, c_end));
        }
    }
    return "";
}


$E.on(window,'load', function() {
	Stage.getInstance().init();
});

function Left(str, n) {
   if (n <= 0)
         return "";
   else if (n > String(str).length)
         return str;
   else
         return String(str).substring(0,n);
};

function left(str, n)
{
   if (n <= 0)
         return "";
   else if (n > String(str).length)
         return str;
   else
         return String(str).substring(0,n) + '...';
}

function disableSelection(target){
	if (typeof target.onselectstart != "undefined") {
		target.onselectstart = function(){
			return false;
		}
	} else if (typeof target.style.MozUserSelect != "undefined") {
		target.style.MozUserSelect = "none";
	} 
}

var _helpExists = false;

function openHelp() {

	var helpElmsId1 = [
		'helpMask',
	];

	var helpElmsId2 = [
		'helpMiniMap',
		'helpRegion',
		'helpResult',
		'helpSearch',
		'helpSuggest',
		'helpTools',
		'helpZoom',
		'helpEjemplos',
		'helpBlog',
		'helpClose'
	];

	if(!_helpExists) {
		var helpElm = document.createElement('DIV');
		document.body.appendChild(helpElm);
		helpElm.id = 'help';

		var helpElm1 = document.createElement('DIV');
		document.body.appendChild(helpElm1);
		helpElm1.id = 'helpBg';
				
		var helpElm2 = document.createElement('DIV');
		document.body.appendChild(helpElm2);
		helpElm2.id = 'helpContainer';
		
		//Deixando o ambiente padrão
		Stage.leftOnOff('on');
		Stage.suggestOnOff(null,{action:'close'})	
		Stage.tabNav(null,{label: 'address'});
		showMiniMap();

  		var elm = document.createElement('DIV');
		helpElm.appendChild(helpElm1);
		helpElm.appendChild(helpElm2);
		elm.id = helpElmsId1[0];
		elm.innerHTML = '<!-- -->';
		elm = null;


		for(var i = 0, l = helpElmsId1.length; i < l; i++) {
			var elm1 = document.createElement('DIV');
			helpElm1.appendChild(elm1);
			elm1.id = helpElmsId1[i];
			elm1.innerHTML = '<!-- -->';
			elm1 = null;
		}
		
		for(var a = 0, b = helpElmsId2.length; a < b; a++) {
			var elm2 = document.createElement('DIV');
			helpElm2.appendChild(elm2);
			elm2.id = helpElmsId2[a];
			elm2.innerHTML = '<!-- -->';
			elm2 = null;
		}
		
		helpElm = null;
		helpElm1 = null;
		helpElm2 = null;
		_helpExists = true;

		//Outras configs
		$D.get('helpBlog').innerHTML = "<a href='http://blog.publiguias.cl/' target='_blank' id='nuevoLinkBlog'>blog</a>";
		
		if($D.getViewportHeight() < 738){
			$D.get('helpEjemplos').style.display="none";//Esconde a imagem do Más
			$D.get('helpResult').style.bottom= "160px";//Sobe o Mejorias
		}else{
			$D.get('helpEjemplos').style.display="";
			$D.get('helpResult').style.top= "320px";
		}

		$E.on('helpClose', 'click', closeHelp);
	}


};

function closeHelp() {
	if(_helpExists) {

		$E.removeListener('helpClose', 'click', closeHelp);

		document.body.removeChild($D.get('help'));		
		_helpExists = false;
	}
};



var _nuevoExists = false;
function openNuevo() {

	var nuevoElmsId1 = [
		'helpMask',
	];

	var nuevoElmsId2 = [
		'nuevoBusqueda',
		'nuevoMejorias',
		'nuevoEjemplos',
		'nuevoSuggest',
		'nuevoFlickr',
		'nuevoBlog',
		'nuevoClose'
	];

	if(!_nuevoExists) {
		var nuevoElm = document.createElement('DIV');
		document.body.appendChild(nuevoElm);
		nuevoElm.id = 'nuevo';

		var nuevoElm1 = document.createElement('DIV');
		document.body.appendChild(nuevoElm1);
		nuevoElm1.id = 'nuevoBg';
				
		var nuevoElm2 = document.createElement('DIV');
		document.body.appendChild(nuevoElm2);
		nuevoElm2.id = 'nuevoContainer';
		
		//Deixando o ambiente padrão
		Stage.leftOnOff('on');
		Stage.suggestOnOff(null,{action:'close'})	
		Stage.tabNav(null,{label: 'address'});
		showMiniMap();

  		var elm = document.createElement('DIV');
		nuevoElm.appendChild(nuevoElm1);
		nuevoElm.appendChild(nuevoElm2);
		elm.id = nuevoElmsId1[0];
		elm.innerHTML = '<!-- -->';
		elm = null;


		for(var i = 0, l = nuevoElmsId1.length; i < l; i++) {
			var elm1 = document.createElement('DIV');
			nuevoElm1.appendChild(elm1);
			elm1.id = nuevoElmsId1[i];
			elm1.innerHTML = '<!-- -->';
			elm1 = null;
		}
		
		for(var a = 0, b = nuevoElmsId2.length; a < b; a++) {
			var elm2 = document.createElement('DIV');
			nuevoElm2.appendChild(elm2);
			elm2.id = nuevoElmsId2[a];
			elm2.innerHTML = '<!-- -->';
			elm2 = null;
		}
		
		nuevoElm = null;
		nuevoElm1 = null;
		nuevoElm2 = null;
		_nuevoExists = true;
		
		//Outras configs
		$D.get('nuevoBlog').innerHTML = "<a href='http://blog.publiguias.cl/' target='_blank' id='nuevoLinkBlog'>blog</a>";
		
		if($D.getViewportHeight() < 738){
			$D.get('nuevoEjemplos').style.display="none";//Esconde a imagem do Más
			$D.get('nuevoMejorias').style.bottom= "160px";//Sobe o Mejorias
		}else{
			$D.get('nuevoEjemplos').style.display="";
			$D.get('nuevoMejorias').style.top= "320px";
		}
		
		$E.on('nuevoClose', 'click', closeNuevo);
	}


};


function closeNuevo() {
	if(_nuevoExists) {

		$E.removeListener('nuevoClose', 'click', closeNuevo);

		document.body.removeChild($D.get('nuevo'));		
		_nuevoExists = false;
	}
};

function flashObj(swfLocation, width, height) {
	var htm = [];
	htm.push('<object width="'+width+'" height="'+height+'" border="0" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">');
	htm.push('<param name="allowscriptaccess" value="always"/>');
	htm.push('<param name="movie" value="'+swfLocation+'"/>');
	htm.push('<param name="quality" value="autohigh"/>');
	htm.push('<param name="wmode" value="transparent"/>');
	htm.push('<embed width="'+width+'" height="'+height+'" border="0" quality="autohigh" type="application/x-shockwave-flash"  wmode="transparent" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" src="'+swfLocation+'" />');
	htm.push('</object>');
	return htm.join('');
};



function selectAllLink(id){
	if (id != '') {
	    document.getElementById(id).focus();
	    document.getElementById(id).select();
	}
}

function didYouMeanAddress() {
    if ($D.get('didYouMean')){
        $D.replaceClass('suggestContent','on','off');
        $D.replaceClass('suggestMessage','off','on');
        $D.get('suggestMessage').innerHTML = $D.get('didYouMean').innerHTML;
        $D.addClass('suggestOnBt','off');
        $D.removeClass('suggestOffBt','off');
        Stage.suggestOnOff(null,{action:'mini'});
    }
}






//usado no quadro do flickr pro ie6 pra contornar o img onload que não funciona
var ie6_onloadImg = function(_function, infoWindow, id, latLng){
	var _me = this;
	var photo = $D.get('flickrIMG'+id);
	var container = photo.parentNode;
	infoWindow.style.visibility = "hidden";
	infoWindow.style.display = "block";
	
	this.execute = function(onloadObj){
		var img = container.getElementsByTagName('img')[0]; 
		if(img.width < 30){
			var next = setTimeout("re_execute()",300) 
		}else{ 
			map.resample(photo, id, latLng)
		}
		return false
	}
	
	re_execute = function(){_me.execute();}
};


//mostra mais resultados da busca
function openResults(link){
	_moreItens(link, 'resultBar');
	searchResultsMas = $D.hasClass($Get('resultBar'),'compact');
}

//mostra mais exemplos de busca
var showMoreSamples = function(link) {
	_moreItens(link, 'homeContent');
}

//mostra mais tags nos resultados
var viewMoreTags = function(id){
	var result = $Get('businessTags'+id);
	
	var classe, texto;
	
	if($D.hasClass(result, 'min_tags')){
		classe = ['min_tags','max_tags'];
		texto = '&laquo;';
	}else{
		classe = ['max_tags','min_tags'];
		texto = '...&raquo;';
	}
	
	//altera a visibilidade das tags do resultado
	var linkResult = $D.getElementsByClassName('moreLink', 'a', result)[0]
	$D.replaceClass(result, classe[0],classe[1]);
	linkResult.innerHTML = texto;
	
	//altera a visibilidade das tags do balão	
	var ballon = $D.getElementsByClassName('businessTags','ul',$Get('infoWindowPlot'+id))[0];
	var linkBallon = $D.getElementsByClassName('moreLink', 'a', ballon)[0]
	$D.replaceClass(ballon, classe[0],classe[1]);
	linkBallon.innerHTML = texto; 

}

function openTags(link){
	_moreItens(link, 'tags');
}

function _moreItens(link, t){
	var target = $Get(t);
	if($D.hasClass(target,'compact')){
		$D.removeClass(target,'compact');
		link.innerHTML = "&lt;&lt;<strong>Menos</strong>";
	}else{
		$D.addClass(target,'compact');
		link.innerHTML = "<strong>M&aacute;s</strong>&gt;&gt;";
		
		
		
	}
}

// SSO
function login() {
	window.location = ssoLoginUrl;	
}

function logout() {
	// verifica requisição
	if (requestManager['logout']) {
		requestManager['logout'].abort();
	}
	
	// faz a requisição
	requestManager['logout'] = new Request();
	requestManager['logout'].getAsync('logout.do', 'javascript', null);
}
