Ext.onReady(function(){
	COS.arcims=COS.arcims||{};
	Date.prototype.getWeek = function() {
		var onejan = new Date(this.getFullYear(),0,1);
		return Math.ceil((((this - onejan) / 86400000) + onejan.getDay())/7);
	}
	COS.arcims.MapGisUI=function(){
		var CH = COS.arcims.MapHelper,
			CS = COS.arcims.MapSearch,
			firstLoad=true,
			_lastSearchTerm="",
			mapDiv="map";
		var _setLastTerm=function(t){_lastSearchTerm=t;}
		var _getLastTerm=function(){return _lastSearchTerm}
		var printPage = function(){ 
			window.open('print/create_pdf.php','gis','toolbar=no,location=no,status=no,menubar=no,directories=no,resizable=yes');
			setTimeout(function(){CH.toggleLoading();}, 500);
		}
		function toggleDisclaimer(){
			if(Ext.get("disclaimerFunction").dom.innerHTML.indexOf("Hide")!=-1){
                Ext.get("gisPanelTxt").applyStyles({height:"273px"});
                Ext.get("gisDisclaimer").applyStyles({height:"7px", overflow:"hidden"});
                Ext.get("disclaimerFunction").applyStyles({backgroundImage:"url(img/plus.gif)"});
                Ext.get("disclaimerFunction").dom.innerHTML="Show Disclaimer";
			} else {
                Ext.get("gisPanelTxt").applyStyles({height:"142px"});
                Ext.get("gisDisclaimer").applyStyles({height:"130px", overflow:"auto"});
                Ext.get("disclaimerFunction").applyStyles({backgroundImage:"url(img/minus.gif)" });
                Ext.get("disclaimerFunction").dom.innerHTML="Hide Disclaimer";
			}
			return false;
		}
		var contentResize = function(){
            var winWidth                = $(window).width()
            var gisContentNewWidth      = 443;
            var gisHdrNewWidth          = 720;
            var gisPanelState           = $('#gisPanel').css('display');
            if(gisPanelState=='block'){
                if(winWidth>1024){
                    gisHdrNewWidth      = 950;
                    gisContentNewWidth  = 669;
                } else {
                    gisHdrNewWidth      = $(window).width()-50;
                    gisContentNewWidth  = $(window).width()-329;
                } 
            } else {
                if(winWidth>1024){
                    gisHdrNewWidth      = 950;
                    gisContentNewWidth  = 916;
                } else {
                    gisHdrNewWidth      = $(window).width()-49;
                    gisContentNewWidth  = $(window).width()-81;
                }
            }
            $('#gisHdr').width(gisHdrNewWidth);
						$('#legend').width(gisHdrNewWidth-6);
            $('#gisContent').width(gisContentNewWidth);
            $('#map').width(gisContentNewWidth);
            
            
			Ext.get(mapDiv).fitToParent(true);
			if(Ext.get("loading")){
				Ext.get("loadContainer").fitToParent(mapDiv);
				Ext.get("loading").center(Ext.get("loadContainer"));
			}
			if(!firstLoad && !CH.isLoading() ){				
				CH.sendImageRequest({params:"mapaction=getImage&"+CS.getSearchTermParams(),cb:(CS.isAerial()?CS.createArcXML:CH.showMap)});
			}
			firstLoad=false;
		}//end contentResize
		/**
		 * Format the seach result for single and multiple results
		*/
		var formatInfo = function(obj){
			var info=false;			
			if(obj.responseText)	{var obj=CH.cleanDecodeResponse(obj);info=true;}			
			var obj = obj.info;
			if(obj[0]&&!obj[0].FIELDS)	return false;
			var len = obj.length;
			var str = "";
		//	if(len>0)	if(CH.getSliderPos()<7)	CH.updateSlider(7);
			if(len==0){
				str = "No match found.";
			}//end if			
			else if(len==1 && obj[0].FIELDS.STR_PARC_C){
				obj = obj[0].FIELDS;						
				
				/*if(obj.SALEDATE.length>4){
					var date = obj.SALEDATE.substring(4,6)+"/"+
									obj.SALEDATE.substring(6,8)+"/"+obj.SALEDATE.substring(0,4);
				}else{ var date = ""; }*/
				
				var template = function(arg1,arg2){
					var header= "<table border=\"1\" cellspacing=\"2\" cellpadding=\"0\" width=\"100%\" class=\"propInfoCell\">",
					temp="";
					if(arguments.length==1){						 
							var temp = header+ "<tr><td colspan=\"3\"  class=\"propInfoCellHdr\"><strong>Summary</strong></td></tr>";
							for(var i =0; i< arg1.length;i++){
								temp +=	"<tr><td align=\"right\"><strong>"+arg1[i][0]+"</strong></td><td width=\"5\">&nbsp;</td><td>"+ arg1[i][1]+"</td></tr>";
							}
							return temp
					}					
					temp = header+"<tr><td colspan=\"3\"  class=\"propInfoCellHdr\"><strong>"+arg1+"</strong></td></tr><tr><td colspan=\"3\">"+arg2+"</td></tr></table>";
					return temp;
				}
				var _fields=[
                        ["Street Parcel: ",obj.STR_PARC_C],
                        ["Land Area: ",parseInt(obj.AREA_SQFT).toFixed(0)],
                        ["Assessed Value: ",parseInt(obj.ASSESSED).toFixed(2)],
                        ["Neighborhood: ",obj.NEIHOOD],
                        ["Historic: ", "<span class=\"historic\">"+(obj.HISTORIC!=""?obj.HISTORIC:"N")+"</span>"],
                        ["Zoning: ",obj.ZONE_NAME],
                        ["Census Tract: ",obj.CENS_TRACT],
                        ["Census Block Group: ",obj.CENS_BLOCK],
                        ["Year Built : ",parseInt(obj.YEARBUILT).toFixed(0)],
                        ["Block Plan: ",obj.BLOCKPLAN],
                        ["Flood Zone: ",obj.FLOODZONE],
                        ["Flood Panel: ",obj.FLOODPANEL],
                        ["Flood Panel Date: ",obj.FLOODDATE],
                        ["Sale Book: ",obj.SALEBOOK],
                        ["Sale Page: ", obj.SALEPAGE],
                        ["Sale Date: ",obj.SALEDATE],
                        ["Sale Type: ",obj.SALETYPE],
                        ["Sale Price: ",obj.SALEPRICE],
                        ["Style: ",obj.STYLE],
                        ["Stories: ",obj.STORIES],
                        ["Units: ",obj.UNITSZ],
                        ["Rooms: ",obj.ROOMS],
                        ["Assessor's Nbhd: ",parseInt(obj.ASSESS_NBD).toFixed(0)],
                        ["Land Use: ", obj.LANDUSE?parseInt(obj.LANDUSE).toFixed(0):""],
                        ["Class Code: ",parseInt(obj.CLASS_CODE).toFixed(0)],
                        ["Tax Amount: $",parseInt(obj.TAXAMT).toFixed(2)],
                        ["CD Eligible (2000): ",obj.CDBG_2000],
												["Trash Collection Week:",obj.TRASHDAY]
                    ];
			

				var convertedParcelStr = obj.STR_PARC_C.toString();
				convertedParcelStr = convertedParcelStr.replace('-','');
				
                str =   '<div id="propInfo"><h3>Property Information</h3>';
								str +=   template("Street Address", obj.LOC);
								str +=   template("Assessed Owner",obj.OWN_NAME+"<br />"+obj.MAIL1+"<br />"+obj.MAIL2);				
								str +=   template(_fields)+"</table>";

                str +=  '<div class="trash-info" style="margin-bottom:5px;"><div class="trash-info-hdr">';
                str +=  '<strong>Additional Information</strong></div><div style="padding:4px;">';
                str +=  '<a href="http://www.springfieldcityhall.com/finance/index.php?id=lookup&parcel='+convertedParcelStr+'" target="_blank">Assessors Information</a><br/>';
                str +=  '<a href="http://www.springfieldcityhall.com/finance/pmthisdetails.0.html?parcelId='+convertedParcelStr+'" target="_blank">Tax Information</a><br/>';
                str +=  '</div></div></div>';
														
                str +=  '<div class="trash-info"><div class="trash-info-hdr">';
                str +=  '<strong>Trash Info</strong></div><div style="padding:4px;">';
                str +=  '<a target="_blank" href="http://www.springfieldcityhall.com/DPW/solid_waste.0.html">Trash is picked up weekly</a>,'; 
                str +=  'recycling and yard waste (seasonal) are picked every other week.';
                str +=  'This week, running from Sunday through Saturday is a week ';
                str +=  '<span class=\"trash-week'+((new Date()).getWeek()%2?'-a">A':'-b">B')+'</span>';
                str +=  '</div></div></div>';
                

                //removes previous street address div if already set
                $('#streetAddressTxt').remove();
                $('#printerHelpTxt').before("<div id=\"streetAddressTxt\"><strong>Street Address:</strong> "+obj.LOC+"</div>");
                
			}//end if -- len=1
			else if(obj[1] && obj[1].multiStreet=="true"){
				for(var i in obj[0].FIELDS){
					if(i.match(/^[0-9]+/)){//hack for IE
						str = str+ "<strong><a class=\"search-results\" id=\""+obj[0].FIELDS[i]["STR_NAME"]+"&multiStreet\" href=\"javascript:void(0);\" title=\""+obj[0].FIELDS[i]["STR_NAME"]+"\">"+obj[0].FIELDS[i]["STR_NAME"]+"</a></strong><br />";
					}
				}//end for loop
			}
			else{				
				var objAddress=[];
				for(var j in obj[0].FIELDS){
						objAddress[j]={
							address:obj[0].FIELDS[j]["LOC"],
							parcel:obj[0].FIELDS[j]["STR_PARC_C"],
							street:obj[0].FIELDS[j]["FULLSTREET"],
							owner:obj[0].FIELDS[j]["OWN_NAME"],
							sf:obj[0].FIELDS[j]["AREA_SQFT"]
						};
				}
				var sortAddr = CS.sortAddress(objAddress);
				for(var i=0; i<sortAddr.length; i++){				
					var addr=sortAddr[i]['address'];
					var temp=new String(addr);								
					if(temp.length>28){
						addr=addr.substr(0,28)+"...";
					}				
					///CHANGED
					str = str+ '[-] <strong><a class="search-results" id="'+(obj[0].FIELDS[i]["CONDO"]&&obj[0].FIELDS[i]["CONDO"]=='Y'?'CONDO_':'')+sortAddr[i].parcel+'" href="javascript:void(0);" title="<h3>Partial Info</h3> # <b>Parcel:</b> '+sortAddr[i].parcel+' <br /><b>Owner:</b> '+sortAddr[i].owner+'<br /><b>Location:</b> '+sortAddr[i].address+'<br /><b>SF:</b> '+sortAddr[i].sf+'" >'+addr+'</a></strong><br />';		
					///
				}//end for loop
					str = "<ul id=\"searchResults\">"+str+"</ul>";
			}//end else	
			Ext.getDom("gisPanelTxt").innerHTML = str;
			//CHANGED
			if(obj.STR_PARC_C && obj.STR_PARC_C.indexOf("8888")>-1)	Ext.getDom("gisPanelTxt").innerHTML = "No information for Condos";
			else Ext.getDom("gisPanelTxt").innerHTML = str;
			////
			Ext.addBehaviors({
				'.search-results @click':function(e,t){
					  var _search = t.id;
						_search=_search.split("&")[0];
						var _multiStreet=_search[1]?1:0;
						
						_setLastTerm(Ext.getDom("keywordStr").value=t.innerHTML);					
						Ext.getDom("gisPanelTxt").innerHTML = "Loading search results...";
						CS.doSearch({searchTerm:_search,cb:formatInfo,multiStreet:_multiStreet});
				}			 
			});	
			var linksArr = Ext.query('.search-results');
			for(var i =0;i<linksArr.length;i++)	Ext.get(linksArr[i]).addTooltip({config:{separator:'#'}});

			if(Ext.getDom('disclaimerFunction').innerHTML == 'Hide Disclaimer'){
					toggleDisclaimer();
			}			
			CH.toggleLoading();
		};//end formatInfo		
		
		
		/**
		 * Add Events to the GUI here
		*/
		Ext.addBehaviors({
			'#gisPropertySearchFrm @submit' : function(e, t){
				var searchTerm =Ext.getDom("keywordStr").value;
				if(searchTerm!="enter street name"&&searchTerm.length>2&&!Ext.Ajax.isLoading()&&searchTerm!=_getLastTerm()){
					Ext.getDom("gisPanelTxt").innerHTML = "Loading search results...";
					CS.doSearch({searchTerm:Ext.getDom("keywordStr").value,cb:formatInfo});
				}
				e.stopEvent();
				_setLastTerm(searchTerm);
				Ext.get("resultContainer").setDisplayed(false);
			},
			'#keywordStr @keyup' : function(){
      	!Ext.get("resultContainer").isDisplayed()?Ext.get("resultContainer").setDisplayed(true):"";
				 this.value=this.value.replace(/([^0-9-a-zA-Z\s])/g,"");
			},
			'#gisPanelHdr a.hidePanel @click': function(){
				Ext.get('gisPanel').replaceClass('show', 'hide');
				Ext.get('gisPanelTab').replaceClass('hide', 'show');
				contentResize();
				return false;
			},
			'#gisPanelTab @click': function(){
				Ext.get('gisPanelTab').replaceClass('show', 'hide');
				Ext.get('gisPanel').replaceClass('hide', 'show');			
				contentResize();
				return false;
			},
			'#gisPanelTab @mouseover': function(){
				$('#gisPanelTab').css({ backgroundPosition: '-23px 0' });
			},
			'#gisPanelTab @mouseout': function(){
				$('#gisPanelTab').css({ backgroundPosition: '0 0' });
			},
			'#disclaimerFunction @click': toggleDisclaimer,
			'.printPDF @click':	function(){
				CH.toggleLoading();
				Ext.Ajax.request({
					url:"print/create_pdf.php",
					method:"POST",
					params:"session="+escape(CH.getPropertyInfo()),
					success:printPage
				});
				return false;
			}
    });//end addBehaviors
		
        
        
		var init = function(){			            
			!Ext.isGecko?Ext.EventManager.onWindowResize(contentResize):""; 
			contentResize();			
			var m = new COS.arcims.Map(mapDiv, {query:window.location.search.substring(1), cb:formatInfo}); 
			m.addZoomControl();
			m.addMapTools({infoButton:true, cb:formatInfo});
		}();		
		return {
			formatInfo:function(o){return formatInfo(o);},
			setLastTerm:function(t){return _setLastTerm(t);}			
		}
	}()
},this);//();end  MapGisUI
(function(){	
	Ext.get("keywordStr").applyStyles({width:"160px"});
	COS.CosAutoComp.prototype.cosOnItemSelect=function(sType, sArgs){
		var sArgs = sArgs, ui = COS.arcims.MapGisUI;
		COS.arcims.MapSearch.doSearch({searchTerm:sArgs[2][1],condo:sArgs[2][2],cb:ui.formatInfo}); //needs to connect to the guis object		
		this._oTextbox.value=sArgs[2][0];
		ui.setLastTerm(sArgs[2][0]);		
	}
	var cosAutoComp = new COS.CosAutoComp({
        containers:{
            input:"keywordStr",
            resultContainer:"resultContainer",
            outterContainer:"outterContainer"
        },
        myServer:"/scriptsgis/checkAddress.jsp",
        myResponseType:"TYPE_JSON",
        mySchema:["resultSet.result","address","parcel","condo"]
	});
	///Added on 04/29/2008 by Guto
	var count=0;
	cosAutoComp.cosAutoCompResult.formatResult = function(aResultItem, sQuery) {
			if(this.cosAutoComp.query!=sQuery)	count=0;//in case the container is never collapsed			
			this.cosAutoComp.query=sQuery;
			if(aResultItem[0]!="not") {
				count++;				
			  this.setHeader("<h4>Please select one of the results below</h4>");
			  return this.cosAutoComp.handleResponse(aResultItem,sQuery);	
			}	
			else {		
				this.setBody("<div id=\"cosresultsdefault\">Sorry, <span style='font-weight:bold'>\""+sQuery+"\"</span> was not found.<br /> Retype your query or simply press \"enter\" in case you want to add this address</div>");
				this.setHeader("");
			}			
	};	
	cosAutoComp.cosAutoCompResult.containerExpandEvent.subscribe(
		function(){
				if(count>=20)	Ext.get("subHeader").setDisplayed(true);
				else	Ext.get("subHeader").setDisplayed(false);
		}																														 
	);
	cosAutoComp.cosAutoCompResult.containerCollapseEvent.subscribe(
		function(){
			count=0;
			Ext.get("subHeader").setDisplayed(false);
		}																														 
	);
	Ext.get(Ext.query(".yui-ac-hd","resultContainer")[0]).insertSibling(COS.util.element.createElement({attr:{id:"subHeader", innerHTML:"or click the \"Search\" button for all matches"}, el:"div",css:{"padding-left":"8px", "font-size":"10px", "font-weight":"bold",display:"none"}}),"after");
	///
	cosAutoComp.cosAutoCompResult.allowBrowserAutocomplete=false;
	cosAutoComp.cosAutoCompResult.useShadow=false;
	Ext.get("outterContainer").applyStyles({width:"260px"});
	cosAutoComp.cosAutoCompResult.textboxFocusEvent.subscribe(function(){Ext.getDom("keywordStr").value="";});
})();