/*
 * FeatureList - simple and easy creation of an interactive "Featured Items" widget
 * Examples and documentation at: http://jqueryglobe.com/article/feature_list/
 * Version: 1.0.0 (01/09/2009)
 * Copyright (c) 2009 jQueryGlobe
 * Licensed under the MIT License: http://en.wikipedia.org/wiki/MIT_License
 * Requires: jQuery v1.3+
*/
;(function($) {
	$.fn.featureList = function(options) {
		var tabs	= $(this);
		var output	= $(options.output);

		new jQuery.featureList(tabs, output, options);

		return this;	
	};

	$.featureList = function(tabs, output, options) {
		function slide(nr) {
			if (typeof nr == "undefined") {
				nr = visible_item + 1;
				nr = nr >= total_items ? 0 : nr;
			}

			tabs.removeClass('current').filter(":eq(" + nr + ")").addClass('current');

			output.stop(true, true).filter(":visible").fadeOut();
			output.filter(":eq(" + nr + ")").fadeIn(function() {
				visible_item = nr;	
			});
		}

		var options			= options || {}; 
		var total_items		= tabs.length;
		var visible_item	= options.start_item || 0;

		options.pause_on_hover		= options.pause_on_hover		|| true;
		options.transition_interval	= options.transition_interval	|| 5000;

		output.hide().eq( visible_item ).show();
		tabs.eq( visible_item ).addClass('current');

//		tabs.click(function() {
//			if ($(this).hasClass('current')) {
//				return false;	
//			}
//
//			slide( tabs.index( this) );
//		});

		if (options.transition_interval > 0) {
			var timer = setInterval(function () {
				slide();
			}, options.transition_interval);

			if (options.pause_on_hover) {
				tabs.mouseenter(function() {
					clearInterval( timer );

				}).mouseleave(function() {
					clearInterval( timer );
					timer = setInterval(function () {
						slide();
					}, options.transition_interval);
				});
			}
		}
	};
})(jQuery);

/* jQuery Carousel 0.9.8
Copyright 2010 Thomas Lanciaux and Pierre Bertet.
This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/>
*/
(function(g){g.fn.carousel=function(q){var q=g.extend({direction:"horizontal",loop:false,dispItems:1,pagination:false,paginationPosition:"inside",nextBtn:'<input type="button" value="Next" />',prevBtn:'<input type="button" value="Previous" />',btnsPosition:"inside",nextBtnInsert:"insertAfter",prevBtnInsert:"insertBefore",nextBtnInsertFn:false,prevBtnInsertFn:false,autoSlide:false,autoSlideInterval:3000,delayAutoSlide:false,combinedClasses:false,effect:"slide",slideEasing:"swing",animSpeed:300,equalWidths:"true",verticalMargin:0,callback:function(){},useAddress:false,adressIdentifier:"carousel",tabLabel:function(r){return r},showEmptyItems:true,ajaxMode:false,ajaxUrl:"",stopSlideBtn:false,stopSlideTextPause:"Pause",stopSlideTextPlay:"Play"},q);if(q.btnsPosition=="outside"){q.prevBtnInsert="insertBefore";q.nextBtnInsert="insertAfter"}q.delayAutoSlide=0+q.delayAutoSlide;return this.each(function(){var r={$elts:{},params:q,launchOnLoad:[]};r.$elts.carousel=g(this).addClass("js");r.$elts.content=g(this).children().css({position:"absolute",top:0});r.$elts.wrap=r.$elts.content.wrap('<div class="carousel-wrap"></div>').parent().css({overflow:"hidden",position:"relative"});r.steps={first:0,count:r.$elts.content.children().length};r.$elts.loader=g('<div class="loader"></div>').css({position:"absolute"});r.steps.last=r.steps.count-1;if(r.params.pagination){o(r)}if(g.isFunction(r.params.prevBtnInsertFn)){r.$elts.prevBtn=r.params.prevBtnInsertFn(r.$elts)}else{if(q.btnsPosition=="outside"){r.$elts.prevBtn=g(q.prevBtn)[q.prevBtnInsert](r.$elts.carousel)}else{r.$elts.prevBtn=g(q.prevBtn)[q.prevBtnInsert](r.$elts.wrap)}}if(g.isFunction(r.params.nextBtnInsertFn)){r.$elts.nextBtn=r.params.nextBtnInsertFn(r.$elts)}else{if(q.btnsPosition=="outside"){r.$elts.nextBtn=g(q.nextBtn)[q.nextBtnInsert](r.$elts.carousel)}else{r.$elts.nextBtn=g(q.nextBtn)[q.nextBtnInsert](r.$elts.wrap)}}r.$elts.nextBtn.addClass("carousel-control next carousel-next");r.$elts.prevBtn.addClass("carousel-control previous carousel-previous");r.lastItemsToLoad;d(r);r.$elts.carousel.attr("tabindex",0).add(r.$elts.carousel.children()).bind({focus:function(s){g(document).bind("keypress",function(t){switch(t.keyCode){case 39:r.$elts.nextBtn.click();break;case 37:r.$elts.prevBtn.click();break}switch(t.charCode){case 110:r.$elts.nextBtn.click();break;case 112:r.$elts.prevBtn.click();break}})},blur:function(){g(document).unbind("keypress")}});n(r);g(function(){c(r);g.each(r.launchOnLoad,function(s,t){t()});if(r.params.autoSlide){f(r)}if(q.stopSlideBtn==true){r.$elts.stopSlideBtn=g('<button type="button" class="slide-control play">'+q.stopSlideTextPause+"</button>");a(r)}})})};function c(s){var t=s.$elts.content.children();var r=0;t.each(function(){$item=g(this);$itemHeight=$item.outerHeight();if($itemHeight>r){r=$itemHeight}});if(s.params.verticalMargin>0){r=r+s.params.verticalMargin}t.height(r);var q=s.$elts.content.children(":first");s.itemWidth=q.outerWidth();if(s.params.direction=="vertical"){s.contentWidth=s.itemWidth}else{if(s.params.equalWidths){s.contentWidth=s.itemWidth*s.steps.count}else{s.contentWidth=(function(){var u=0;s.$elts.content.children().each(function(){u+=g(this).outerWidth()});return u})()}}s.$elts.content.width(s.contentWidth);s.itemHeight=r;if(s.params.direction=="vertical"){s.$elts.content.css({height:s.itemHeight*s.steps.count+"px"});s.$elts.content.parent().css({height:s.itemHeight*s.params.dispItems+"px"})}else{s.$elts.content.parent().css({height:s.itemHeight+"px"})}i(s)}function d(q){q.$elts.nextBtn.add(q.$elts.prevBtn).bind("enable",function(){var r=g(this).unbind("click").bind("click",function(){if(q.params.ajaxMode&&r.is(".next")&&b(q)==(p(q)-1)&&!q.lastItemsToLoad){h(q);q.$elts.content.ajaxSuccess(function(){})}else{e(q,j(q,(r.is(".next")?"next":"prev")));if(q.params.stopSlideBtn==true){q.$elts.stopSlideBtn.trigger("pause")}else{m(q)}}}).removeClass("disabled").removeAttr("disabled");if(q.params.combinedClasses){r.removeClass("next-disabled previous-disabled").removeAttr("disabled")}}).bind("disable",function(){var r=g(this).unbind("click").addClass("disabled").attr("disabled","disabled");if(q.params.combinedClasses){if(r.is(".next")){r.addClass("next-disabled")}else{if(r.is(".previous")){r.addClass("previous-disabled")}}}}).hover(function(){g(this).toggleClass("hover")})}function o(q){q.$elts.pagination=g('<div class="center-wrap"><div class="carousel-pagination"><p></p></div></div>')[((q.params.paginationPosition=="outside")?"insertAfter":"appendTo")](q.$elts.carousel).find("p");q.$elts.paginationBtns=g([]);q.$elts.content.find("li").each(function(r){if(r%q.params.dispItems==0){k(q,r)}})}function k(r,q){if(r.params.pagination){r.$elts.paginationBtns=r.$elts.paginationBtns.add(g('<a role="button"><span>'+r.params.tabLabel(r.$elts.paginationBtns.length+1)+"</span></a>").data("firstStep",q)).appendTo(r.$elts.pagination);r.$elts.paginationBtns.slice(0,1).addClass("active");r.$elts.paginationBtns.click(function(s){e(r,g(this).data("firstStep"));if(r.params.stopSlideBtn==true){r.$elts.stopSlideBtn.trigger("pause")}else{m(r)}})}}function n(q){if(q.params.useAddress&&g.isFunction(g.fn.address)){g.address.init(function(s){var r=g.address.pathNames();if(r[0]===q.params.adressIdentifier&&!!r[1]){e(q,r[1]-1)}else{g.address.value("/"+q.params.adressIdentifier+"/1")}}).change(function(s){var r=g.address.pathNames();if(r[0]===q.params.adressIdentifier&&!!r[1]){e(q,r[1]-1)}})}else{q.params.useAddress=false}}function e(q,r){q.params.callback(r);l(q,r);q.steps.first=r;i(q);if(q.params.useAddress){g.address.value("/"+q.params.adressIdentifier+"/"+(r+1))}}function j(r,q){if(q=="prev"){if(!r.params.showEmptyItems){if(r.steps.first==0){return((r.params.loop)?(r.steps.count-r.params.dispItems):false)}else{return Math.max(0,r.steps.first-r.params.dispItems)}}else{if((r.steps.first-r.params.dispItems)>=0){return r.steps.first-r.params.dispItems}else{return((r.params.loop)?(r.steps.count-r.params.dispItems):false)}}}else{if(q=="next"){if((r.steps.first+r.params.dispItems)<r.steps.count){if(!r.params.showEmptyItems){return Math.min(r.steps.first+r.params.dispItems,r.steps.count-r.params.dispItems)}else{return r.steps.first+r.params.dispItems}}else{return((r.params.loop)?0:false)}}}}function l(q,r){switch(q.params.effect){case"no":if(q.params.direction=="vertical"){q.$elts.content.css("top",-(q.itemHeight*r)+"px")}else{q.$elts.content.css("left",-(q.itemWidth*r)+"px")}break;case"fade":if(q.params.direction=="vertical"){q.$elts.content.hide().css("top",-(q.itemHeight*r)+"px").fadeIn(q.params.animSpeed)}else{q.$elts.content.hide().css("left",-(q.itemWidth*r)+"px").fadeIn(q.params.animSpeed)}break;default:if(q.params.direction=="vertical"){q.$elts.content.stop().animate({top:-(q.itemHeight*r)+"px"},q.params.animSpeed,q.params.slideEasing)}else{q.$elts.content.stop().animate({left:-(q.itemWidth*r)+"px"},q.params.animSpeed,q.params.slideEasing)}break}}function i(q){if(j(q,"prev")!==false){q.$elts.prevBtn.trigger("enable")}else{q.$elts.prevBtn.trigger("disable")}if(j(q,"next")!==false){q.$elts.nextBtn.trigger("enable")}else{q.$elts.nextBtn.trigger("disable")}if(q.params.pagination){q.$elts.paginationBtns.removeClass("active").filter(function(){return(g(this).data("firstStep")==q.steps.first)}).addClass("active")}}function f(q){q.delayAutoSlide=window.setTimeout(function(){q.autoSlideInterval=window.setInterval(function(){e(q,j(q,"next"))},q.params.autoSlideInterval)},q.params.delayAutoSlide)}function m(q){window.clearTimeout(q.delayAutoSlide);window.clearInterval(q.autoSlideInterval);q.params.delayAutoSlide=0}function a(r){var q=r.$elts.stopSlideBtn;q.bind({play:function(){f(r);q.removeClass("pause").addClass("play").html(r.params.stopSlideTextPause)},pause:function(){m(r);q.removeClass("play").addClass("pause").html(r.params.stopSlideTextPlay)}});q.click(function(s){if(q.is(".play")){q.trigger("pause")}else{if(q.is(".pause")){q.trigger("play")}}});q.prependTo(r.$elts.wrap)}function p(q){return q.$elts.pagination.children().length}function b(q){return q.steps.first/q.params.dispItems}function h(q){q.$elts.carousel.prepend(q.$elts.loader);g.ajax({url:q.params.ajaxUrl,dataType:"json",success:function(r){q.lastItemsToLoad=r.bLastItemsToLoad;g(q.$elts.content).append(r.shtml);q.steps={first:q.steps.first+q.params.dispItems,count:q.$elts.content.children().length};q.steps.last=q.steps.count-1;c(q);k(q,q.steps.first);e(q,q.steps.first);if(q.params.stopSlideBtn==true){q.$elts.stopSlideBtn.trigger("pause")}else{m(q)}q.$elts.loader.remove()}})}})(jQuery);



/*
 * 	 imGoogleMaps - A JQuery Google Maps Implementation
 * 	 @author Les Green
 * 	 Copyright (C) 2008-2009 Intriguing Minds, Inc.
 *   
 *   Version 0.9.4 - 23 Jan 2010
 *   1. Bug fix - maps weren't displaying in ie7
  
 *   
 *   Version 0.9.3 - 8 Jan 2010
 *   1. Bug fix - markers not displaying in ie
 *   2. Add images to infoWindow 
 *   
 *   
 *   Version 0.9.2 - 30 Dec 2009
 *   
 *   1. Bug fix - Print displaying null on screen
 *   2. Bug fix - Received error when clicking on infoWindow if full address was not given
 *   3. Changed infoWindow so that is does not display street view link if 
 *   	StreetViewPanorama is not available for given point. 
 *   	And Street View Overlay will not open to Street View if address not available
 *   4. Added option: geocode_request_rate. 
 *   	Geocode Requests limited to 15000 per IP address per day (which works out at
		an average of one every 5.76 seconds). Had to create delayed request - 1 every 5 seconds.
		
		The default for geocode_request_rate is 1000 (1 sec). If address amount is over 10, 
		set this at a higher rate - 5000 (5 secs) and use progress_bar option 
		
	 5.	Added progress_bar option. Uses imProgressBar plugin. Because of the delay, this will
	 	let the user know that the requests are processing.
	 	
	 6. Added phone (phone number) and desc (description) option to json record. Will be displayed in infoWindow.
 *      Phone Number style same as address. 
 *      Description - Style = span.imDescription
 *   7. Added custom_marker option - http://gmaps-utility-library.googlecode.com/svn/trunk/mapiconmaker/1.1/src/
 *   	custom_marker can optionally be added to json record - if you want each marker to have a custom color
 *   	Can also use Custom Marker that don't use the file - http://code.google.com/p/google-maps-icons/    	
 *   
 *   
 *   Version 0.9.1 - 24 Dec 2009
 *   
 *   1. Fixed bug with Street View Control. Button did not exit street view
 *   
 *   Version 0.9 - 18 Dec 2009
 *   1. Fixed manual mode bug
 *   2. Added option for manual mode - remove 'Get Directions' label and directions div.
 *   	show_directions_menu: false
 *   	
 *   	The following options are not needed when show_directions_menu == false
 *   		directions
 *   		search
 *   		button_class
 *    
 *   3. Can press enter when doing a search (if on from or to field). No longer have to click search button   
 *   4. Added Street view (Panorama)
 *   	Requires the following options:
 *   
 *    	street_view - the div that holds the street view
 *    	street_close_loc - the location of the close button for street view.
 *      
 *            
 *   5. Ability to plot multiple addresses. 
 *   	When getting multiple addresses via the data_url option, the data_type must be set to json
 *      Also added 'name' option to json record, so name and address can be displayed in infoWindow.
 *      Style = span.imBusinessName 
 *   
 *     
 *   
 *   
 *   version 1.0 - may add the following:
 *   1. http://www.geocodezip.com/mapStreetviewTabs.html - directions in tab
 *   2. Adsense for Maps - http://code.google.com/apis/maps/documentation/services.html#Advertising
 *   3. Traffic Overlay
 *   4. Microsoft Virtual Earth - http://www.mashedworld.com/DualMaps.aspx
 *  
 *   This program is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program.  If not, see <http://www.gnu.org/licenses/>.

 *   Demo and Documentation can be found at:   
 *   http://www.grasshopperpebbles.com
 *   
 */

//imGMapObj (map object) and imStreetViewPoint (LatLng) must be set outside object 
//due to closure issue with map.getInfoWindow in Javascript call
var imGMapObj = null;
var imStreetViewPoint = null;
//used to toggle overlay
var imSVOverlay = null;
//geocode requests have a rate limit of 1.7 seconds per query
//this var will hold the setTimeout object
var imGeocodeRequestDelay = null;

function imLatLngs(lat, lng, place, bus_name, phone, desc, images) {
	this.lat = lat;
	this.lng = lng;
	this.place = place;
	this.bus_name = bus_name;
	this.phone = phone;
	this.desc = desc;
	this.images = images;
}
//used with custom markers loaded from json file
function imIconOptions(icon_options) {
	this.icon_options = icon_options;
}

;(function($) {
	$.fn.extend({
        imGoogleMaps: function(options) { 
        	opts = $.extend({}, $.googleMaps.defaults, options);
			return this.each(function() {
				new $.googleMaps(this, opts);
			});
        }
    });	

$.googleMaps = function(obj, opts) {
	var gdir, geocoder, gSearch, gMap, panoClient = null;
	var $this = $(obj);
	var toAddress = (opts.address);
	var aLatLng = new Array();
	var aIconOptions = new Array();
	var aRequestedAdress = '';
	init();
	
	function init() {
  		if (opts.mode == 'auto') {
			gSearch = 'dlgSearch';
			gMap = 'googleMap';
			createAuto();
		}
		else {
			if (opts.show_directions_menu) {
				gSearch = opts.search;
				$("#" + opts.directions).html(opts.address);
			}
			gMap = opts.map;
			createManual();
		}
		showMap();
		if (opts.progress_bar) {
			$this.imProgressBar({
				progress_bar: {'container': opts.progress_bar.container, 'bar_back_class' : opts.progress_bar.bar_back_class, 'bar_class': opts.progress_bar.bar_class},
				display: {'type': 'inline', 'insert_type': 'before', 'element': '#'+opts.map},
				animate_duration: 1500
			});
		}	
		if (opts.data_url) {
			var d = getDataString();
			doAjax('GET', opts.data_url, d, '', loadAddress);
		}
		else 
			if (opts.address) {
				loadAddress(opts.address);
			}
			else 
				if (opts.lat_lng) {
					loadAddress(opts.lat_lng);
				}
				else {
					alert('Address must be specified!');
				}
	};

	function createAuto() {
		var dWidth = (parseInt($this.css("width")) - parseInt(opts.map.width) - 4) + "px";
		var bWidth = parseInt(dWidth) + parseInt(opts.map.width) + 2 + "px";
		$this.append(
			$('<div></div>')
				.css({backgroundColor: opts.menu_bar.background, color: opts.menu_bar.text, width: bWidth, height: "24px", marginBottom:"2px"})
				.append(
					$('<ul></ul>')	
						.css({listStyle: "none", marginTop:"0", marginBottom:"0", marginLeft:"3px", paddingLeft:"0", display:"block", width:"100px", float:"left"})
						.append(
							$('<li></li>').css({display: "inline", marginRight: "10px", marginTop:"0", marginBottom:"0", marginLeft:"0"}).append(getLink('Get Directions', 'showDlgSearch'))),
					$('<div></div>').css({float:"right"}).append(
						$('<ul></ul>').css({listStyle: "none", marginTop:"0", marginBottom:"0", marginLeft:"3px", paddingLeft:"0"})
							.append(
							$('<li></li>').css({display: "inline", marginRight: "10px", marginTop:"0", marginBottom:"0", marginLeft:"0"}).append(getLink('Print Map', 'printMap', 'googleMap')),
							$('<li></li>').css({display: "inline", marginRight: "10px", marginTop:"0", marginBottom:"0", marginLeft:"0"}).append(getLink('Print Directions', 'printMap', 'googleDirections'))))),	
			$('<div></div>')
				.attr("id", "dlgSearch")
				.css({float:"left", width:dWidth, minHeight:"100px", backgroundColor:opts.directions.background, color:opts.directions.text, marginBottom:"2px", display:"none", paddingTop:"0px"})
				.append(
					$('<p></p>')
						.css({float:"left", width:"15px", height:"15px", backgroundColor:"#64B949", color:"#000", border:"solid thin #000", font:"bold 11px/16px Helvitica, Arial, sans-serif", display:"block", paddingLeft:"6px", marginLeft: "12px"})
						.append('A'),
					$('<input type="text" name="googleFrom" id="googleFrom" value="" /><br /><br /><br />'),
					$('<p></p>')
						.css({float:"left", width:"15px", height:"15px", backgroundColor:"#fB7468", color:"#000", border:"solid thin #000", font:"bold 11px/16px Helvitica, Arial, sans-serif", display:"block", paddingLeft:"6px", marginLeft:"12px"})
						.append('B'),
					$('<input type="text" name="googleTo" id="googleTo" maxlength="75" value="" /><br />').val(opts.address),
					$('<input type="submit" name="btnGetDir" id="btnGetDir" value="Get Directions" />')),
			$('<div></div>')
				.attr("id", "googleMap")
				.css({float:"right", width:opts.map.width, height:opts.map.height, marginRight:"2px", color:"#000000"}),
			$('<div></div>')
				.attr("id", "googleDirections")
				.css({float:"left", width:dWidth, height:opts.map.height, backgroundColor:opts.directions.background, color:opts.directions.text, marginRight:"2px", overflow: "auto"})
				.html(opts.address));
		$("input", $("#dlgSearch")).css({float:"left", margin:"8px 0 0 3px", fontSize:"11px", width:"175px", padding:"0px"})
								   .keypress(function (e) {
										if (e.which == '13') {
											e.preventDefault();
											doSearch();
										}
									});
		$(":submit", $("#dlgSearch")).css({float:"right", margin: "8px 15px 3px 0", width:"95px"});
		$('#btnGetDir').click(function() {
			doSearch(dWidth);
		});
	};
		
	function createManual() {
		var getDir = (opts.show_directions_menu) ? $('<li></li>').append(getLink('Get Directions', 'showDlgSearch')) : $('<li></li>');
		var printDir = (opts.show_directions_menu) ? $('<li></li>').append(getLink('Print Directions', 'printMap', opts.directions)) : $('<li></li>'); 
		$this.prepend(
			$('<div></div>')
				.addClass(opts.menu_class)
				.append($('<ul></ul>').append($(getDir)),
					$('<div></div>').addClass(opts.print_class).append(
						$('<ul></ul>').append(
							$(printDir),
							$('<li></li>').append(getLink('Print Map', 'printMap', opts.map))))));
		if (opts.show_directions_menu) {
			$this.append(						
				$('<div></div>')
					.attr("id", opts.search)
					.append(
						$('<p></p>')
							.css({float:"left", width:"15px", height:"15px", backgroundColor:"#64B949", color:"#000", border:"solid thin #000", font:"bold 11px/16px Helvitica, Arial, sans-serif", display:"block", paddingLeft:"6px", marginLeft: "12px"})
							.append('A'),
						$('<input type="text" name="googleFrom" id="googleFrom" value="" /><br /><br /><br />'),
						$('<p></p>')
							.css({float:"left", width:"15px", height:"15px", backgroundColor:"#fB7468", color:"#000", border:"solid thin #000", font:"bold 11px/16px Helvitica, Arial, sans-serif", display:"block", paddingLeft:"6px", marginLeft:"12px"})
							.append('B'),
						$('<input type="text" name="googleTo" id="googleTo" maxlength="75" value="" /><br />').val(opts.address),
						$('<input type="submit" name="btnGetDir" id="btnGetDir" value="Get Directions" />').addClass(opts.button_class)),	
				$('<div></div>')
					.attr("id", opts.map),
				$('<div></div>')
					.attr("id", opts.directions)
					.html(opts.address));
			var dWidth = (parseInt($this.css("width")) - parseInt($('#'+opts.map).css('width'))) + "px";		
			$('#btnGetDir').click(function() {
				doSearch(dWidth);
			});
			$('#googleTo, #googleFrom').keypress(function (e) {
				if (e.which == '13') {
					e.preventDefault();
					doSearch();
				}
			});		
		} else {
			$this.append($('<div></div>').attr("id", opts.map));
		}	
		
		if (opts.street_view) {
			$('<div></div>').attr("id", "imStreetViewClose")
						.append($('<a></a>').attr({
							"id": "imStreetCloseBtn",
							'title': 'Exit Street View'
						}).append($('<img></img>').attr('src', opts.street_close_loc))).insertAfter("#"+opts.map);
			$('<div></div>').attr("id", opts.street_view).insertAfter("#imStreetViewClose");			
			$('#imStreetCloseBtn').click(function() {
				imStreetView.toggleStreetView(false);
			});
			
		}	
	};	
	
	function showDlgSearch() {
		var d = ($("#"+gSearch).css("display") == "none") ? "block" : "none";
		$("#"+gSearch).css("display", d);
		if (d == "block") {
			$("#"+gMap).css("height", "525px");
		} else {
			$("#"+gMap).css("height", opts.map.height);
		}
		GUnload();
		showMap();
		loadAddress(toAddress);
	};
	
	function doSearch(dWidth) {
		if (($("#googleFrom").val() != '') && ($("#googleTo").val() != '')) {
			toAddress = $("#googleTo").val();
			if (opts.mode == 'auto') {
				$("#googleDirections").html('').css("width", parseInt(dWidth) - 10);
			} else {
				$("#"+opts.directions).html('');
			}	
			gdir.load("from: " + $("#googleFrom").val() + " to: " + toAddress);
		} else {
			alert("From and To addresses must be entered");	
		}
	};
	
	function showMap() {
		var w,h,dir = null;
    	if (GBrowserIsCompatible()) {
			dir = (opts.mode == 'auto') ? 'googleDirections' : opts.directions;
			w = (opts.mode == 'auto') ? parseInt(opts.map.width) : parseInt($("#"+opts.map).css("width"));
			h = (opts.mode == 'auto') ? parseInt($("#googleMap").css("height")) : parseInt($("#"+opts.map).css("height"));
			//map = new GMap2(document.getElementById(gMap),{size:new GSize(w,h)});
			//what is logo passive?*****************
			imGMapObj = new GMap2(document.getElementById(gMap),{size:new GSize(w,h), logoPassive: true});
			geocoder = new GClientGeocoder();
			if (opts.street_view) {
				panoClient = new GStreetviewClient();
			}
			//imGMapObj.addControl(new GSmallMapControl());
			//imGMapObj.addControl(new GMapTypeControl());
			imGMapObj.setUIToDefault();
        	if (opts.street_view) {
				imGMapObj.addControl(new imStreetViewControl());
				GEvent.addListener(imGMapObj, "click", function(overlay, point) {
	                if (point) {
						panoClient.getNearestPanorama(point, function(reply) {
				            if (reply.code == 200) {
				            	if (reply.Location) {
					                //svp.remove();
					                //svp.setLocationAndPOVFromServerResponse(reply);
									//panoClient.getNearestPanorama(point, initPanorama2);
									imStreetViewPoint = point;
									imStreetView.init(opts.map,opts.street_view, true);
				              	} else {
				                	imGMapObj.openInfoWindowHtml(point,"Street View Panorama not available for this location");
				              	}
				            } else {
				              	alert("Error : "+reply.code);
				            }
			          	});
	                }
	            });
			}
			
			/*baseIcon = new GIcon(G_DEFAULT_ICON);
			baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
			baseIcon.iconSize = new GSize(20, 34);
			baseIcon.shadowSize = new GSize(37, 34);
			baseIcon.iconAnchor = new GPoint(9, 34);
			baseIcon.infoWindowAnchor = new GPoint(9, 2);*/
			
			if ((opts.show_directions_menu) && (opts.directions)) {
				gdir = new GDirections(imGMapObj, document.getElementById(dir));
				//gdir = new GDirections(imGMapObj, $('#'+dir));
			  //	GEvent.addListener(gdir, "load", onGDirectionsLoad);
    			GEvent.addListener(gdir, "error", handleErrors);
			}
    	}
    };
	
	/*function getAdrLocationOld(adr, adr_cnt, cnt, bn) {
		geocoder.getLocations(adr, function(response) {
			if (!response || response.Status.code != 200) {
	    		alert("Sorry, we are unable to gecode address: " + adr);
		  	} else { 
		    	var place = response.Placemark[0];
				aLatLng[cnt] = new imLatLngs(place.Point.coordinates[1], place.Point.coordinates[0], place, bn);
				if (aLatLng.length == adr_cnt) {
					mapAddress();
				}
		  	}
		});
	};*/
	
	function getAdrLocation(cnt) {
		var adr, bName, phone, desc, img, adr_cnt, iOptions = '';
		if (aRequestedAdress.lat) {
			adr = new GLatLng(aRequestedAdress.lat, aRequestedAdress.lng);
			adr_cnt = 1; 
		} else if (aRequestedAdress[0].address) {
			adr_cnt  = aRequestedAdress.length;
			adr = aRequestedAdress[cnt].address;
			bName = (aRequestedAdress[cnt].name) ? aRequestedAdress[cnt].name : '';
			phone = (aRequestedAdress[cnt].phone) ? aRequestedAdress[cnt].phone : '';
			desc = (aRequestedAdress[cnt].desc) ? aRequestedAdress[cnt].desc : '';
			img = (aRequestedAdress[cnt].images) ? aRequestedAdress[cnt].images : '';
			iOptions = (aRequestedAdress[cnt].custom_marker) ? aRequestedAdress[cnt].custom_marker : '';
		} else if (aRequestedAdress[0].lat) {
			adr_cnt  = aRequestedAdress.length;
			adr = new GLatLng(aRequestedAdress[cnt].lat, aRequestedAdress[cnt].lng);
		} else {
			adr = aRequestedAdress;
			adr_cnt = 1;
		}
		geocoder.getLocations(adr, function(response) {
			if (!response || response.Status.code != 200) {
	    		alert("Sorry, we are unable to gecode address: " + adr);
		  	} else { 
		    	var place = response.Placemark[0];
				aLatLng[cnt] = new imLatLngs(place.Point.coordinates[1], place.Point.coordinates[0], place, bName, phone, desc, img);
				if (iOptions) {
					aIconOptions[cnt] = iOptions;
				}
				cnt++;
				if (opts.progress_bar) {
					$(window).trigger('updateProgress');
				}
				if (cnt < adr_cnt) {
					//gecode has a rate limit for requests
					imGeocodeRequestDelay = setTimeout (function() {
						getAdrLocation(cnt);
					}, opts.geocode_request_rate);
				} else {
					clearTimeout(imGeocodeRequestDelay);
					mapAddress();
				}
		  	}
		});
	};
	
	function getAddressCount(address) {
		var adr_cnt = 0;
		if (address.lat) {
			adr_cnt = 1; 
		} else if (address[0].address) {
			adr_cnt  = address.length;
		} else if (address[0].lat) {
			adr_cnt  = address.length;
		} else {
			adr_cnt = 1;
		}
		return adr_cnt;
	};
	
	function loadAddress(address) {
		if (geocoder) {
			var total_recs = getAddressCount(address);
			aRequestedAdress = address; 
			//initialize progress bar
			if (opts.progress_bar) {
				$(window).trigger('startProgress', [total_recs]);
			}
			getAdrLocation(0);
			//resizeMap();
		}				
	};
	
	/*function getLatLngsOld(address) {
		var bName = '';
		if (geocoder) {
			var place, adr_cnt;
			if (address.lat) {
				place = new GLatLng(address.lat, address.lng);
				getAdrLocation(place, 1, 0);
				//getAdrLocation(place, 1, 0, '');
			}
			else 
				if (address[0].address) {
					adr_cnt  = address.length;
					
					getAdrLocation(address, adr_cnt, 0);
					$.each(address, function(i, itm){
						bName = (itm.name) ? itm.name : '';
						//getAdrLocation(itm.address, adr_cnt, i, bName);
						
					});
				}
				else 
					if (address[0].lat) {
						adr_cnt  = address.length;
						//gecode has a rate limit for requests
						setTimeout ('findPromoCode(document.form1.promoCode.value)', 5000);
						$.each(address, function(i, itm){
							place = new GLatLng(itm.lat, itm.lng);
							getAdrLocation(place, adr_cnt, i, '');
						});
					}
					else {
						getAdrLocation(address, 1, 0, '');
					}
		}
	};*/
	
	function mapAddress() {
		//set bounds	
		bounds = new GLatLngBounds();
		$.each(aLatLng, function(i, itm){
	    	bounds.extend(new GLatLng(itm.lat, itm.lng));
	    });
	    var latSpan = bounds.toSpan().lat();
	    imGMapObj.setCenter(bounds.getCenter(), imGMapObj.getBoundsZoomLevel(bounds));
		var newBounds = imGMapObj.getBounds();
	    var newLatSpan = newBounds.toSpan().lat();
	    if (latSpan/newLatSpan > .90) { imGMapObj.zoomOut(); }
		
		$.each(aLatLng, function(i, itm){
			var point = new GLatLng(itm.lat, itm.lng);
			var marker = createMarker(point, i, itm.place, itm.bus_name, itm.phone, itm.desc, itm.images);
	      	
			//var latlng = marker.getLatLng();
	      	//var pixel = map.fromLatLngToDivPixel(latlng);
	      	//if (Math.abs(pixel.x - clickedX) < 12 && Math.abs(pixel.y - clickedY) < 20) {
	        	//GEvent.trigger(marker, 'click');
	      	//}
	      	imGMapObj.addOverlay(marker);
		});	
    };
	
	function createMarker(point, index, place, bus_name, phone, desc, images) {
		// Create a lettered icon for this point using our icon class
		var icon = getIconOptions(index);
		//var letter = String.fromCharCode("A".charCodeAt(0) + index);
		//var letteredIcon = new GIcon(baseIcon);
		//letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
	
	  	// Set up our GMarkerOptions object
	  	markerOptions = { icon: icon, draggable:opts.draggable};
	  	var mrkr = new GMarker(point, markerOptions);
		GEvent.addListener(mrkr, "click", function() {
			//var adr = place.address;
			var addr;
			if ((place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare) && (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea) && (place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName)) {
				var str = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName;
				var cty = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
				var ste = place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
				//var zip = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber;
				addr = str + '<br />' + cty + ', ' + ste + ' ';
			} else {
				addr = place.address;
			}
			if ((opts.show_directions_menu) && (opts.directions)) {
				$("#googleTo").val(place.address);
			}
			if (phone) {
				addr += '<br />' + phone;
			}
			if (desc) {
				addr += '<br /><span class="imDescription">' + desc +'</span>';
			}
		    
			var mhtml = '<p class="infoWindowStreetAddress">';
			mhtml += (bus_name) ? '<span class="imBusinessName">'+bus_name+'</span><br />'+addr : addr;
			if (images) {
				var im = '';
				var theImage = '';
				$.each(images, function(i, itm){
					var cls = (itm.class_name) ? 'class="'+itm.class_name+'" ' : '';
					theImage = '<img ' + cls + 'src="'+ itm.image_loc + '" width='+itm.width+' height='+itm.height+' />';
					im += (itm.url) ? '<a href="' + itm.url + '" target="_blank">' + theImage + '</a>' : theImage;	
					if (itm.new_line) {
						im += '<br />';
					}
				});
				mhtml += '<br />' + im;
			}
			//var mhtml = '<p style="color:#000; font-size:11px;">' + address;
			if (opts.street_view) {
				panoClient.getNearestPanorama(point, function(reply){
					if (reply.code == 200) {
						if (reply.Location) {
							//svp.remove();
							//svp.setLocationAndPOVFromServerResponse(reply);
							//panoClient.getNearestPanorama(point, initPanorama2);
							imStreetViewPoint = point;
							mhtml += '<br /><a href="javascript:void(0)" onclick="imStreetView.init(opts.map,opts.street_view,true);">Street View</a></p>';
							imGMapObj.openInfoWindowHtml(point, mhtml);
						}
					} else {
						alert("Error : " + reply.code);
					}
				});
			//imStreetViewPoint = point;
			//mhtml += '<br /><a href="javascript:void(0)" onclick="imStreetView.init(opts.map,opts.street_view,true);">Street View</a>';
			} else {
				mhtml += '</p>';
				imGMapObj.openInfoWindowHtml(point, mhtml);
			}
		});
	  	return mrkr;
	};
	
	function getIconOptions(index) {
		var iconOptions = {};
		var icon, mOptions;
		if ((!opts.custom_marker) && (aIconOptions.length == 0)) {
			//regular marker
			var letter = String.fromCharCode("A".charCodeAt(0) + index);
			//icon = new GIcon(baseIcon);
			icon = new GIcon(G_DEFAULT_ICON);
			icon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
			icon.shadow = "http://www.google.com/mapfiles/shadow50.png";
			icon.iconSize = new GSize(20, 34);
			icon.shadowSize = new GSize(37, 34);
			icon.iconAnchor = new GPoint(9, 34);
			icon.infoWindowAnchor = new GPoint(9, 2);
		} else {
			if (opts.custom_marker) {
				mOptions = opts.custom_marker;
			} else if (aIconOptions.length != 0) {
				mOptions = aIconOptions[index][0];
			}
			if (mOptions.type == 'marker') {
				iconOptions.width = (mOptions.width) ? mOptions.width : 32;
				iconOptions.height = (mOptions.height) ? mOptions.height : 32;
				iconOptions.primaryColor = (mOptions.primaryColor) ? mOptions.primaryColor : '#FD766A';
				iconOptions.cornerColor = (mOptions.cornerColor) ? mOptions.cornerColor : '#FFFFFF';
				iconOptions.strokeColor = (mOptions.strokeColor) ? mOptions.strokeColor : "#000000";
				icon = MapIconMaker.createMarkerIcon(iconOptions);
			} else if (mOptions.type == 'labeledmarker') {
				iconOptions.primaryColor = (mOptions.primaryColor) ? mOptions.primaryColor : '#FD766A';
				iconOptions.strokeColor = (mOptions.strokeColor) ? mOptions.strokeColor : "#000000";
				iconOptions.label = String.fromCharCode("A".charCodeAt(0) + index);
				iconOptions.labelColor = (mOptions.labelColor) ? mOptions.labelColor : "#000000";
				if (mOptions.starPrimaryColor) {
					iconOptions.addStar = true;
					iconOptions.starPrimaryColor = mOptions.starPrimaryColor;
					iconOptions.starStrokeColor = mOptions.starStrokeColor;
				}
				icon = MapIconMaker.createLabeledMarkerIcon(iconOptions);
			} else if (mOptions.type == 'flat') {
				iconOptions.width = (mOptions.width) ? mOptions.width : 32;
				iconOptions.height = (mOptions.height) ? mOptions.height : 32;
				iconOptions.primaryColor = (mOptions.primaryColor) ? mOptions.primaryColor : '#FD766A';
				iconOptions.label = String.fromCharCode("A".charCodeAt(0) + index);
				iconOptions.labelSize = (mOptions.labelSize) ? mOptions.labelSize : 14;
				iconOptions.labelColor = (mOptions.labelColor) ? mOptions.labelColor : "#000000";
				iconOptions.shape = (mOptions.shape) ? mOptions.shape : "circle"; //roundrect
				icon = MapIconMaker.createFlatIcon(iconOptions);
			} else if (mOptions.type == 'user_image') {
				icon = new GIcon();
		        icon.image = mOptions.image_loc;
		        icon.iconSize = new GSize(mOptions.width, mOptions.height);
		        icon.iconAnchor = new GPoint(mOptions.width/2, mOptions.height/2);
				icon.infoWindowAnchor = new GPoint(mOptions.width/2, mOptions.height/2);
			}
		} 
		return icon;	
	};
	
	function getIconOptionsOld(index) {
		var iconOptions = {};
		var icon;
		if (opts.custom_marker) {
			if (opts.custom_marker.type == 'marker') {
				iconOptions.width = (opts.custom_marker.width) ? opts.custom_marker.width : 32;
				iconOptions.height = (opts.custom_marker.height) ? opts.custom_marker.height : 32;
				iconOptions.primaryColor = (opts.custom_marker.primaryColor) ? opts.custom_marker.primaryColor : '#FD766A';
				iconOptions.cornerColor = (opts.custom_marker.cornerColor) ? opts.custom_marker.cornerColor : '#FFFFFF';
				iconOptions.strokeColor = (opts.custom_marker.strokeColor) ? opts.custom_marker.strokeColor : "#000000";
				//icon = MapIconMaker.createMarkerIcon(iconOptions);
			} else if (opts.custom_marker.type == 'labeledmarker') {
				iconOptions.primaryColor = (opts.custom_marker.primaryColor) ? opts.custom_marker.primaryColor : '#FD766A';
				iconOptions.strokeColor = (opts.custom_marker.strokeColor) ? opts.custom_marker.strokeColor : "#000000";
				iconOptions.labelColor = (opts.custom_marker.labelColor) ? opts.custom_marker.labelColor : "#000000";
				if (opts.custom_marker.starPrimaryColor) {
					iconOptions.addStar = true;
					iconOptions.starPrimaryColor = opts.custom_marker.starPrimaryColor;
					iconOptions.starStrokeColor = opts.custom_marker.starStrokeColor;
				}
				//icon = MapIconMaker.createMarkerIcon(iconOptions);
			} else if (opts.custom_marker.type == 'flat') {
				iconOptions.width = (opts.custom_marker.width) ? opts.custom_marker.width : 32;
				iconOptions.height = (opts.custom_marker.height) ? opts.custom_marker.height : 32;
				iconOptions.primaryColor = (opts.custom_marker.primaryColor) ? opts.custom_marker.primaryColor : '#FD766A';
				iconOptions.labelSize = (opts.custom_marker.labelSize) ? opts.custom_marker.labelSize : 14;
				iconOptions.labelColor = (opts.custom_marker.labelColor) ? opts.custom_marker.labelColor : "#000000";
				iconOptions.shape = (opts.custom_marker.shape) ? opts.custom_marker.shape : "circle"; //roundrect
				//icon = MapIconMaker.createMarkerIcon(iconOptions);
			}
		} else if (aIconOptions.length != 0) {
			if (aIconOptions[index][0].type == 'marker') {
				iconOptions.width = (aIconOptions[index][0].width) ? aIconOptions[index][0].width : 32;
				iconOptions.height = (aIconOptions[index][0].height) ? aIconOptions[index][0].height : 32;
				iconOptions.primaryColor = (aIconOptions[index][0].primaryColor) ? aIconOptions[index][0].primaryColor : '#FD766A';
				iconOptions.cornerColor = (aIconOptions[index][0].cornerColor) ? aIconOptions[index][0].cornerColor : '#FFFFFF';
				iconOptions.strokeColor = (aIconOptions[index][0].strokeColor) ? aIconOptions[index][0].strokeColor : "#000000";
				//icon = MapIconMaker.createMarkerIcon(iconOptions);
			} else if (aIconOptions[index][0].type == 'labeledmarker') {
				iconOptions.primaryColor = (aIconOptions[index][0].primaryColor) ? aIconOptions[index][0].primaryColor : '#FD766A';
				iconOptions.strokeColor = (aIconOptions[index][0].strokeColor) ? aIconOptions[index][0].strokeColor : "#000000";
				iconOptions.labelColor = (aIconOptions[index][0].labelColor) ? aIconOptions[index][0].labelColor : "#000000";
				if (aIconOptions[index][0].starPrimaryColor) {
					iconOptions.addStar = true;
					iconOptions.starPrimaryColor = aIconOptions[index][0].starPrimaryColor;
					iconOptions.starStrokeColor = aIconOptions[index][0].starStrokeColor;
				}
				//icon = MapIconMaker.createMarkerIcon(iconOptions);
			} else if (aIconOptions[index][0].type == 'flat') {
				iconOptions.width = (aIconOptions[index][0].width) ? aIconOptions[index][0].width : 32;
				iconOptions.height = (aIconOptions[index][0].height) ? aIconOptions[index][0].height : 32;
				iconOptions.primaryColor = (aIconOptions[index][0].primaryColor) ? aIconOptions[index][0].primaryColor : '#FD766A';
				iconOptions.labelSize = (aIconOptions[index][0].labelSize) ? aIconOptions[index][0].labelSize : 14;
				iconOptions.labelColor = (aIconOptions[index][0].labelColor) ? aIconOptions[index][0].labelColor : "#000000";
				iconOptions.shape = (aIconOptions[index][0].shape) ? aIconOptions[index][0].shape : "circle"; //roundrect
				//icon = MapIconMaker.createMarkerIcon(iconOptions);
			}
		}
	};
		
	function handleErrors(){
		var gError = gdir.getStatus().code;
		switch(gError) {
			case G_GEO_UNKNOWN_ADDRESS:
				alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gError);
				break;
			case G_GEO_UNAVAILABLE_ADDRESS:
				alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gError);
			case G_GEO_SERVER_ERROR: 
				alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gError);
				break;
			case G_GEO_MISSING_QUERY:
				alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gError);
				break;
			case G_GEO_BAD_KEY:
				alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gError);
				break;
			case G_GEO_BAD_REQUEST:
				alert("A directions request could not be successfully parsed.\n Error code: " + gError);
				break;
			default:
				alert("An unknown error occurred.");
		}
	};
	
	function getDataString() {
		var str = '';
		if (opts.data) {
			$.each(opts.data, function(i, itm) {
				str += itm.name + "=" + itm.value + "&";							
			});
			//remove last "&"
			str = str.substr(0, (str.length-1));
		}
		return str;
	};
		
	function doAjax(t, u, d, fnBefore, fnSuccess) {
		$.ajax({
			type: t,
			url: u,
			data: d,
			dataType: opts.data_type,
			beforeSend: fnBefore, 
			success: fnSuccess
	 	}); //close $.ajax(
	};
	
	function getLink(t, f, p) {
		var a = document.createElement('a');
		$(a)
		//$('<a></a>)')
			.attr("href", "#")
			.append(t)
			.click(function() {
				var fn = eval(f);
				if (p) {
					fn(p);
				} else {
					fn();
				}
				return false;
			});
			if (opts.mode == 'auto') $(a).css({"color": opts.menu_bar.text, lineHeight: "26px", marginLeft: "5px", textDecoration: "none"});
		return a;
	};
	
	function printMap(div) {
		//var w = (opts.mode == 'auto') ? parseInt(opts.map.width) : $('#'+opts.map).css('width');
		//var h = (opts.mode == 'auto') ? parseInt(opts.map.height) : $('#'+opts.map).css('height');
		//var w = window.open('','','width='+w+',height='+h);
		var w = window.open();
		//w.document.open("text/html");
		w.document.write($('#'+div).html());
		w.print();		
		//w.document.close();
		w.close();
	};
};
	
$.googleMaps.defaults = {
	mode: 'auto',//manual
	data_url: '',
	data: '',
	data_type: 'text',
	address: '',
	map: {"width": "400px", "height": "400px"},
	directions: {"background": "#fff", "text": "#000"},
	menu_bar: {"background": "#3366cc", "text": "#fff"},
	search: '',
	print_class: '',
	button_class: '',
	lat_lng: '',
	show_directions_menu: true,
	draggable: false, //whether markers are draggable
	street_view: '',
	street_close_loc: '',
	progress_bar: '',//{container: 'imProgBarCntnr', bar_back_class: '', bar_class: ''},
	geocode_request_rate: 500,
	custom_marker: ''//{'type': 'labeledmarker', 'width': '32', 'height': '32', 'primaryColor': '#FFD766A', 'strokeColor': '#000000', 'labelColor': '#000000', 'starPrimaryColor': '', 'starStrokeColor': '', 'cornerColor': '#FFFFFF', 'shape': 'circle'} 
};

})(jQuery);		


function imStreetViewControl() {}

imStreetViewControl.prototype = new GControl();

imStreetViewControl.prototype.initialize = function(imGMapObj) {
  var streetViewBtn = document.createElement("div");
  streetViewBtn.style.textDecoration = "none";
  streetViewBtn.style.color = "#000000";
  streetViewBtn.style.backgroundColor = "white";
  streetViewBtn.style.font = "small Arial";
  streetViewBtn.style.fontSize = "11px";
  streetViewBtn.style.fontWeight = "bold";
  streetViewBtn.style.border = "1px solid black";
  streetViewBtn.style.padding = "2px";
  streetViewBtn.style.marginBottom = "3px";
  streetViewBtn.style.textAlign = "center";
  streetViewBtn.style.width = "6em";
  streetViewBtn.style.cursor = "pointer";
  //container.appendChild(streetViewBtn);
  streetViewBtn.appendChild(document.createTextNode("Street view"));
  GEvent.addDomListener(streetViewBtn, "click", function() {
  	if (!imSVOverlay) {
		imSVOverlay = new GStreetviewOverlay();
		imGMapObj.addOverlay(imSVOverlay);
	} else {
		imGMapObj.removeOverlay(imSVOverlay);
		imSVOverlay = null;
	}	
  });

  imGMapObj.getContainer().appendChild(streetViewBtn);
  return streetViewBtn;
}

imStreetViewControl.prototype.getDefaultPosition = function() {
  return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(210, 7));
}

var imStreetView = new imStreetView();

function imStreetView() {
	this.mapDiv = '';
	this.streetDiv = '';
	this.streetClose = 'imStreetViewClose';
	this.point = '';
	this.init = function(mapDiv, streetDiv, bShow) {
		this.mapDiv = mapDiv;
		this.streetDiv = streetDiv;
		this.point = imStreetViewPoint;
		this.toggleStreetView(bShow);
	};
	
	this.toggleStreetView = function(bShow) {
		if (bShow) {
			document.getElementById( this.streetDiv ).style.display = 'block';
			document.getElementById( this.streetClose ).style.display = 'block';
            document.getElementById( this.mapDiv ).style.display = 'none'
            var myPano = new GStreetviewPanorama( document.getElementById( this.streetDiv ));
			GEvent.addListener(myPano, "error", this.handleNoFlash);
			myPano.setLocationAndPOV(this.point);
		} else {
			document.getElementById( this.streetDiv ).style.display = 'none';
			document.getElementById( this.streetClose ).style.display = 'none';
            document.getElementById( this.mapDiv ).style.display = 'block';
			
		}	
	};
	
	this.handleNoFlash = function(errorCode) {
		if (errorCode == 603) {
		   alert("Error: Flash doesn't appear to be supported by your browser");
		   return;
		}
	}; 
}


(function(b){b.tinysort={id:"TinySort",version:"1.0.4",defaults:{order:"asc",attr:"",place:"start",returns:false}};b.fn.extend({tinysort:function(h,j){if(h&&typeof(h)!="string"){j=h;h=null}var e=b.extend({},b.tinysort.defaults,j);var p={};this.each(function(t){var v=(!h||h=="")?b(this):b(this).find(h);var u=e.order=="rand"?""+Math.random():(e.attr==""?v.text():v.attr(e.attr));var s=b(this).parent();if(!p[s]){p[s]={s:[],n:[]}}if(v.length>0){p[s].s.push({s:u,e:b(this),n:t})}else{p[s].n.push({e:b(this),n:t})}});for(var g in p){var d=p[g];d.s.sort(function k(t,s){var i=t.s.toLowerCase?t.s.toLowerCase():t.s;var u=s.s.toLowerCase?s.s.toLowerCase():s.s;if(c(t.s)&&c(s.s)){i=parseFloat(t.s);u=parseFloat(s.s)}return(e.order=="asc"?1:-1)*(i<u?-1:(i>u?1:0))})}var m=[];for(var g in p){var d=p[g];var n=[];var f=b(this).length;switch(e.place){case"first":b.each(d.s,function(s,t){f=Math.min(f,t.n)});break;case"org":b.each(d.s,function(s,t){n.push(t.n)});break;case"end":f=d.n.length;break;default:f=0}var q=[0,0];for(var l=0;l<b(this).length;l++){var o=l>=f&&l<f+d.s.length;if(a(n,l)){o=true}var r=(o?d.s:d.n)[q[o?0:1]].e;r.parent().append(r);if(o||!e.returns){m.push(r.get(0))}q[o?0:1]++}}return this.pushStack(m)}});function c(e){var d=/^\s*?[\+-]?(\d*\.?\d*?)\s*?$/.exec(e);return d&&d.length>0?d[1]:false}function a(e,f){var d=false;b.each(e,function(h,g){if(!d){d=g==f}});return d}b.fn.TinySort=b.fn.Tinysort=b.fn.tsort=b.fn.tinysort})(jQuery);


/*#############################################################
Name: Niceforms
Version: 2.0
Author: Lucian Slatineanu
URL: http://www.emblematiq.com/projects/niceforms/

Feel free to use and modify but please keep this copyright intact.
#################################################################*/

//Theme Variables - edit these to match your theme
var imagesPath = "img/";
var selectRightWidthSimple = 19;
var selectRightWidthScroll = 2;
var selectMaxHeight = 200;
var textareaTopPadding = 10;
var textareaSidePadding = 10;

//Global Variables
var NF = new Array();
var isIE = false;
var resizeTest = 1;

//Initialization function
function NFInit() {
	try {
		document.execCommand('BackgroundImageCache', false, true);
	} catch(e) {}
	if(!document.getElementById) {return false;}
	//alert("click me first");
	NFDo('start');
}
function NFDo(what) {
	var niceforms = document.getElementsByTagName('form');
	var identifier = new RegExp('(^| )'+'niceform'+'( |$)');
	if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
		var ieversion=new Number(RegExp.$1);
		if(ieversion < 7) {return false;} //exit script if IE6
		isIE = true;
	}
	for(var q = 0; q < niceforms.length; q++) {if(identifier.test(niceforms[q].className)) {
		if(what == "start") { //Load Niceforms
			NF[q] = new niceform(niceforms[q]);
			niceforms[q].start();
		}
		else { //Unload Niceforms
			niceforms[q].unload();
			NF[q] = "";
		}
	}}
}
function NFFix() {
	NFDo('stop');
	NFDo('start');
}
function niceform(nf) {
	nf._inputText = new Array(); nf._inputRadio = new Array(); nf._inputCheck = new Array(); nf._inputSubmit = new Array(); nf._inputFile = new Array(); nf._textarea = new Array(); nf._select = new Array(); nf._multiselect = new Array();
	nf.add_inputText = function(obj) {this._inputText[this._inputText.length] = obj; inputText(obj);}
	nf.add_inputRadio = function(obj) {this._inputRadio[this._inputRadio.length] = obj; inputRadio(obj);}
	nf.add_inputCheck = function(obj) {this._inputCheck[this._inputCheck.length] = obj; inputCheck(obj);}
	nf.add_inputSubmit = function(obj) {this._inputSubmit[this._inputSubmit.length] = obj; inputSubmit(obj);}
	nf.add_inputFile = function(obj) {this._inputFile[this._inputFile.length] = obj; inputFile(obj);}
	nf.add_textarea = function(obj) {this._textarea[this._textarea.length] = obj; textarea(obj);}
	nf.add_select = function(obj) {this._select[this._select.length] = obj; selects(obj);}
	nf.add_multiselect = function(obj) {this._multiselect[this._multiselect.length] = obj; multiSelects(obj);}
	nf.start = function() {
		//Separate and assign elements
		var allInputs = this.getElementsByTagName('input');
		for(var w = 0; w < allInputs.length; w++) {
			switch(allInputs[w].type) {
				case "text": case "password": {this.add_inputText(allInputs[w]); break;}
				case "radio": {this.add_inputRadio(allInputs[w]); break;}
				case "checkbox": {this.add_inputCheck(allInputs[w]); break;}
				case "submit": case "reset": case "button": {this.add_inputSubmit(allInputs[w]); break;}
				case "file": {this.add_inputFile(allInputs[w]); break;}
			}
		}
		var allButtons = this.getElementsByTagName('button');
		for(var w = 0; w < allButtons.length; w++) {
			this.add_inputSubmit(allButtons[w]);
		}
		var allTextareas = this.getElementsByTagName('textarea');
		for(var w = 0; w < allTextareas.length; w++) {
			this.add_textarea(allTextareas[w]);
		}
		var allSelects = this.getElementsByTagName('select');
		for(var w = 0; w < allSelects.length; w++) {
			if(allSelects[w].size == "1") {this.add_select(allSelects[w]);}
			else {this.add_multiselect(allSelects[w]);}
		}
		//Start
		for(w = 0; w < this._inputText.length; w++) {this._inputText[w].init();}
		for(w = 0; w < this._inputRadio.length; w++) {this._inputRadio[w].init();}
		for(w = 0; w < this._inputCheck.length; w++) {this._inputCheck[w].init();}
		for(w = 0; w < this._inputSubmit.length; w++) {this._inputSubmit[w].init();}
		for(w = 0; w < this._inputFile.length; w++) {this._inputFile[w].init();}
		for(w = 0; w < this._textarea.length; w++) {this._textarea[w].init();}
		for(w = 0; w < this._select.length; w++) {this._select[w].init(w);}
		for(w = 0; w < this._multiselect.length; w++) {this._multiselect[w].init(w);}
	}
	nf.unload = function() {
		//Stop
		for(w = 0; w < this._inputText.length; w++) {this._inputText[w].unload();}
		for(w = 0; w < this._inputRadio.length; w++) {this._inputRadio[w].unload();}
		for(w = 0; w < this._inputCheck.length; w++) {this._inputCheck[w].unload();}
		for(w = 0; w < this._inputSubmit.length; w++) {this._inputSubmit[w].unload();}
		for(w = 0; w < this._inputFile.length; w++) {this._inputFile[w].unload();}
		for(w = 0; w < this._textarea.length; w++) {this._textarea[w].unload();}
		for(w = 0; w < this._select.length; w++) {this._select[w].unload();}
		for(w = 0; w < this._multiselect.length; w++) {this._multiselect[w].unload();}
	}
}
function inputText(el) { //extent Text inputs
	el.oldClassName = el.className;
	el.left = document.createElement('img');
	el.left.src = imagesPath + "0.png";
	el.left.className = "NFTextLeft";
	el.right = document.createElement('img');
	el.right.src = imagesPath + "0.png";
	el.right.className = "NFTextRight";
	el.dummy = document.createElement('div');
	el.dummy.className = "NFTextCenter";
	el.onfocus = function() {
		this.dummy.className = "NFTextCenter NFh";
		this.left.className = "NFTextLeft NFh";
		this.right.className = "NFTextRight NFh";
	}
	el.onblur = function() {
		this.dummy.className = "NFTextCenter";
		this.left.className = "NFTextLeft";
		this.right.className = "NFTextRight";
	}
	el.init = function() {
		this.parentNode.insertBefore(this.left, this);
		this.parentNode.insertBefore(this.right, this.nextSibling);
		this.dummy.appendChild(this);
		this.right.parentNode.insertBefore(this.dummy, this.right);
		this.className = "NFText";
	}
	el.unload = function() {
		this.parentNode.parentNode.appendChild(this);
		this.parentNode.removeChild(this.left);
		this.parentNode.removeChild(this.right);
		this.parentNode.removeChild(this.dummy);
		this.className = this.oldClassName;
	}
}
function inputRadio(el) { //extent Radio buttons
	el.oldClassName = el.className;
	el.dummy = document.createElement('div');
	if(el.checked) {el.dummy.className = "NFRadio NFh";}
	else {el.dummy.className = "NFRadio";}
	el.dummy.ref = el;
	if(isIE == false) {el.dummy.style.left = findPosX(el) + 'px'; el.dummy.style.top = findPosY(el) + 'px';}
	else {el.dummy.style.left = findPosX(el) + 4 + 'px'; el.dummy.style.top = findPosY(el) + 4 + 'px';}
	el.dummy.onclick = function() {
		if(!this.ref.checked) {
			var siblings = getInputsByName(this.ref.name);
			for(var q = 0; q < siblings.length; q++) {
				siblings[q].checked = false;
				siblings[q].dummy.className = "NFRadio";
			}
			this.ref.checked = true;
			this.className = "NFRadio NFh";
		}
	}
	el.onclick = function() {
		if(this.checked) {
			var siblings = getInputsByName(this.name);
			for(var q = 0; q < siblings.length; q++) {
				siblings[q].dummy.className = "NFRadio";
			}
			this.dummy.className = "NFRadio NFh";
		}
	}
	el.onfocus = function() {this.dummy.className += " NFfocused";}
	el.onblur = function() {this.dummy.className = this.dummy.className.replace(/ NFfocused/g, "");}
	el.init = function() {
		this.parentNode.insertBefore(this.dummy, this);
		el.className = "NFhidden";
	}
	el.unload = function() {
		this.parentNode.removeChild(this.dummy);
		this.className = this.oldClassName;
	}
}
function inputCheck(el) { //extend Checkboxes
	el.oldClassName = el.className;
	el.dummy = document.createElement('img');
	el.dummy.src = imagesPath + "0.png";
	if(el.checked) {el.dummy.className = "NFCheck NFh";}
	else {el.dummy.className = "NFCheck";}
	el.dummy.ref = el;
	if(isIE == false) {el.dummy.style.left = findPosX(el) + 'px'; el.dummy.style.top = findPosY(el) + 'px';}
	else {el.dummy.style.left = findPosX(el) + 4 + 'px'; el.dummy.style.top = findPosY(el) + 4 + 'px';}
	el.dummy.onclick = function() {
		if(!this.ref.checked) {
			this.ref.checked = true;
			this.className = "NFCheck NFh";
		}
		else {
			this.ref.checked = false;
			this.className = "NFCheck";
		}
	}
	el.onclick = function() {
		if(this.checked) {this.dummy.className = "NFCheck NFh";}
		else {this.dummy.className = "NFCheck";}
	}
	el.onfocus = function() {this.dummy.className += " NFfocused";}
	el.onblur = function() {this.dummy.className = this.dummy.className.replace(/ NFfocused/g, "");}
	el.init = function() {
		this.parentNode.insertBefore(this.dummy, this);
		el.className = "NFhidden";
	} 
	el.unload = function() {
		this.parentNode.removeChild(this.dummy);
		this.className = this.oldClassName;
	}
}
function inputSubmit(el) { //extend Buttons
	el.oldClassName = el.className;
	el.left = document.createElement('img');
	el.left.className = "NFButtonLeft";
	el.left.src = imagesPath + "0.png";
	el.right = document.createElement('img');
	el.right.src = imagesPath + "0.png";
	el.right.className = "NFButtonRight";
	el.onmouseover = function() {
		this.className = "NFButton NFh";
		this.left.className = "NFButtonLeft NFh";
		this.right.className = "NFButtonRight NFh";
	}
	el.onmouseout = function() {
		this.className = "NFButton";
		this.left.className = "NFButtonLeft";
		this.right.className = "NFButtonRight";
	}
	el.init = function() {
		this.parentNode.insertBefore(this.left, this);
		this.parentNode.insertBefore(this.right, this.nextSibling);
		this.className = "NFButton";
	}
	el.unload = function() {
		this.parentNode.removeChild(this.left);
		this.parentNode.removeChild(this.right);
		this.className = this.oldClassName;
	}
}
function inputFile(el) { //extend File inputs
	el.oldClassName = el.className;
	el.dummy = document.createElement('div');
	el.dummy.className = "NFFile";
	el.file = document.createElement('div');
	el.file.className = "NFFileNew";
	el.center = document.createElement('div');
	el.center.className = "NFTextCenter";
	el.clone = document.createElement('input');
	el.clone.type = "text";
	el.clone.className = "NFText";
	el.clone.ref = el;
	el.left = document.createElement('img');
	el.left.src = imagesPath + "0.png";
	el.left.className = "NFTextLeft";
	el.button = document.createElement('img');
	el.button.src = imagesPath + "0.png";
	el.button.className = "NFFileButton";
	el.button.ref = el;
	el.button.onclick = function() {this.ref.click();}
	el.init = function() {
		var top = this.parentNode;
		if(this.previousSibling) {var where = this.previousSibling;}
		else {var where = top.childNodes[0];}
		top.insertBefore(this.dummy, where);
		this.dummy.appendChild(this);
		this.center.appendChild(this.clone);
		this.file.appendChild(this.center);
		this.file.insertBefore(this.left, this.center);
		this.file.appendChild(this.button);
		this.dummy.appendChild(this.file);
		this.className = "NFhidden";
		this.relatedElement = this.clone;
	}
	el.unload = function() {
		this.parentNode.parentNode.appendChild(this);
		this.parentNode.removeChild(this.dummy);
		this.className = this.oldClassName;
	}
	el.onchange = el.onmouseout = function() {this.relatedElement.value = this.value;}
	el.onfocus = function() {
		this.left.className = "NFTextLeft NFh";
		this.center.className = "NFTextCenter NFh";
		this.button.className = "NFFileButton NFh";
	}
	el.onblur = function() {
		this.left.className = "NFTextLeft";
		this.center.className = "NFTextCenter";
		this.button.className = "NFFileButton";
	}
	el.onselect = function() {
		this.relatedElement.select();
		this.value = '';
	}
}
function textarea(el) { //extend Textareas
	el.oldClassName = el.className;
	el.height = el.offsetHeight - textareaTopPadding;
	el.width = el.offsetWidth - textareaSidePadding;
	el.topLeft = document.createElement('img');
	el.topLeft.src = imagesPath + "0.png";
	el.topLeft.className = "NFTextareaTopLeft";
	el.topRight = document.createElement('div');
	el.topRight.className = "NFTextareaTop";
	el.bottomLeft = document.createElement('img');
	el.bottomLeft.src = imagesPath + "0.png";
	el.bottomLeft.className = "NFTextareaBottomLeft";
	el.bottomRight = document.createElement('div');
	el.bottomRight.className = "NFTextareaBottom";
	el.left = document.createElement('div');
	el.left.className = "NFTextareaLeft";
	el.right = document.createElement('div');
	el.right.className = "NFTextareaRight";
	el.init = function() {
		var top = this.parentNode;
		if(this.previousSibling) {var where = this.previousSibling;}
		else {var where = top.childNodes[0];}
		top.insertBefore(el.topRight, where);
		top.insertBefore(el.right, where);
		top.insertBefore(el.bottomRight, where);
		this.topRight.appendChild(this.topLeft);
		this.right.appendChild(this.left);
		this.right.appendChild(this);
		this.bottomRight.appendChild(this.bottomLeft);
		el.style.width = el.topRight.style.width = el.bottomRight.style.width = el.width + 'px';
		el.style.height = el.left.style.height = el.right.style.height = el.height + 'px';
		this.className = "NFTextarea";
	}
	el.unload = function() {
		this.parentNode.parentNode.appendChild(this);
		this.parentNode.removeChild(this.topRight);
		this.parentNode.removeChild(this.bottomRight);
		this.parentNode.removeChild(this.right);
		this.className = this.oldClassName;
		this.style.width = this.style.height = "";
	}
	el.onfocus = function() {
		this.topLeft.className = "NFTextareaTopLeft NFh";
		this.topRight.className = "NFTextareaTop NFhr";
		this.left.className = "NFTextareaLeftH";
		this.right.className = "NFTextareaRightH";
		this.bottomLeft.className = "NFTextareaBottomLeft NFh";
		this.bottomRight.className = "NFTextareaBottom NFhr";
	}
	el.onblur = function() {
		this.topLeft.className = "NFTextareaTopLeft";
		this.topRight.className = "NFTextareaTop";
		this.left.className = "NFTextareaLeft";
		this.right.className = "NFTextareaRight";
		this.bottomLeft.className = "NFTextareaBottomLeft";
		this.bottomRight.className = "NFTextareaBottom";
	}
}
function selects(el) { //extend Selects
	el.oldClassName = el.className;
	el.dummy = document.createElement('div');
	el.dummy.className = "NFSelect";
	el.dummy.style.width = el.offsetWidth + 'px';
	el.dummy.ref = el;
	el.left = document.createElement('img');
	el.left.src = imagesPath + "0.png";
	el.left.className = "NFSelectLeft";
	el.right = document.createElement('div');
	el.right.className = "NFSelectRight";
	el.txt = document.createTextNode(el.options[0].text);
	el.bg = document.createElement('div');
	el.bg.className = "NFSelectTarget";
	el.bg.style.display = "none";
	el.opt = document.createElement('ul');
	el.opt.className = "NFSelectOptions";
	el.dummy.style.left = findPosX(el) + 'px';
	el.dummy.style.top = findPosY(el) + 'px';
	el.opts = new Array(el.options.length);
	el.init = function(pos) {
		this.dummy.appendChild(this.left);
		this.right.appendChild(this.txt);
		this.dummy.appendChild(this.right);
		this.bg.appendChild(this.opt);
		this.dummy.appendChild(this.bg);
		for(var q = 0; q < this.options.length; q++) {
			this.opts[q] = new option(this.options[q], q);
			this.opt.appendChild(this.options[q].li);
			this.options[q].lnk.onclick = function() {
				this._onclick();
				this.ref.dummy.getElementsByTagName('div')[0].innerHTML = this.ref.options[this.pos].text;
				this.ref.options[this.pos].selected = "selected";
				for(var w = 0; w < this.ref.options.length; w++) {this.ref.options[w].lnk.className = "";}
				this.ref.options[this.pos].lnk.className = "NFOptionActive";
			}
		}
		if(this.options.selectedIndex) {
			this.dummy.getElementsByTagName('div')[0].innerHTML = this.options[this.options.selectedIndex].text;
			this.options[this.options.selectedIndex].lnk.className = "NFOptionActive";
		}
		this.dummy.style.zIndex = 999 - pos;
		this.parentNode.insertBefore(this.dummy, this);
		this.className = "NFhidden";
	}
	el.unload = function() {
		this.parentNode.removeChild(this.dummy);
		this.className = this.oldClassName;
	}
	el.dummy.onclick = function() {
		var allDivs = document.getElementsByTagName('div'); for(var q = 0; q < allDivs.length; q++) {if((allDivs[q].className == "NFSelectTarget") && (allDivs[q] != this.ref.bg)) {allDivs[q].style.display = "none";}}
		if(this.ref.bg.style.display == "none") {this.ref.bg.style.display = "block";}
		else {this.ref.bg.style.display = "none";}
		if(this.ref.opt.offsetHeight > selectMaxHeight) {
			this.ref.bg.style.width = this.ref.offsetWidth - selectRightWidthScroll + 33 + 'px';
			this.ref.opt.style.width = this.ref.offsetWidth - selectRightWidthScroll + 'px';
		}
		else {
			this.ref.bg.style.width = this.ref.offsetWidth - selectRightWidthSimple + 33 + 'px';
			this.ref.opt.style.width = this.ref.offsetWidth - selectRightWidthSimple + 'px';
		}
	}
	el.bg.onmouseout = function(e) {
		if (!e) var e = window.event;
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
		var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
		if((reltg.nodeName == 'A') || (reltg.nodeName == 'LI') || (reltg.nodeName == 'UL')) return;
		if((reltg.nodeName == 'DIV') || (reltg.className == 'NFSelectTarget')) return;
		else{this.style.display = "none";}
	}
	el.dummy.onmouseout = function(e) {
		if (!e) var e = window.event;
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
		var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
		if((reltg.nodeName == 'A') || (reltg.nodeName == 'LI') || (reltg.nodeName == 'UL')) return;
		if((reltg.nodeName == 'DIV') || (reltg.className == 'NFSelectTarget')) return;
		else{this.ref.bg.style.display = "none";}
	}
	el.onfocus = function() {this.dummy.className += " NFfocused";}
	el.onblur = function() {this.dummy.className = this.dummy.className.replace(/ NFfocused/g, "");}
	el.onkeydown = function(e) {
		if (!e) var e = window.event;
		var thecode = e.keyCode;
		var active = this.selectedIndex;
		switch(thecode){
			case 40: //down
				if(active < this.options.length - 1) {
					for(var w = 0; w < this.options.length; w++) {this.options[w].lnk.className = "";}
					var newOne = active + 1;
					this.options[newOne].selected = "selected";
					this.options[newOne].lnk.className = "NFOptionActive";
					this.dummy.getElementsByTagName('div')[0].innerHTML = this.options[newOne].text;
				}
				return false;
				break;
			case 38: //up
				if(active > 0) {
					for(var w = 0; w < this.options.length; w++) {this.options[w].lnk.className = "";}
					var newOne = active - 1;
					this.options[newOne].selected = "selected";
					this.options[newOne].lnk.className = "NFOptionActive";
					this.dummy.getElementsByTagName('div')[0].innerHTML = this.options[newOne].text;
				}
				return false;
				break;
			default:
				break;
		}
	}
}
function multiSelects(el) { //extend Multiple Selects
	el.oldClassName = el.className;
	el.height = el.offsetHeight;
	el.width = el.offsetWidth;
	el.topLeft = document.createElement('img');
	el.topLeft.src = imagesPath + "0.png";
	el.topLeft.className = "NFMultiSelectTopLeft";
	el.topRight = document.createElement('div');
	el.topRight.className = "NFMultiSelectTop";
	el.bottomLeft = document.createElement('img');
	el.bottomLeft.src = imagesPath + "0.png";
	el.bottomLeft.className = "NFMultiSelectBottomLeft";
	el.bottomRight = document.createElement('div');
	el.bottomRight.className = "NFMultiSelectBottom";
	el.left = document.createElement('div');
	el.left.className = "NFMultiSelectLeft";
	el.right = document.createElement('div');
	el.right.className = "NFMultiSelectRight";
	el.init = function() {
		var top = this.parentNode;
		if(this.previousSibling) {var where = this.previousSibling;}
		else {var where = top.childNodes[0];}
		top.insertBefore(el.topRight, where);
		top.insertBefore(el.right, where);
		top.insertBefore(el.bottomRight, where);
		this.topRight.appendChild(this.topLeft);
		this.right.appendChild(this.left);
		this.right.appendChild(this);
		this.bottomRight.appendChild(this.bottomLeft);
		el.style.width = el.topRight.style.width = el.bottomRight.style.width = el.width + 'px';
		el.style.height = el.left.style.height = el.right.style.height = el.height + 'px';
		el.className = "NFMultiSelect";
	}
	el.unload = function() {
		this.parentNode.parentNode.appendChild(this);
		this.parentNode.removeChild(this.topRight);
		this.parentNode.removeChild(this.bottomRight);
		this.parentNode.removeChild(this.right);
		this.className = this.oldClassName;
		this.style.width = this.style.height = "";
	}
	el.onfocus = function() {
		this.topLeft.className = "NFMultiSelectTopLeft NFh";
		this.topRight.className = "NFMultiSelectTop NFhr";
		this.left.className = "NFMultiSelectLeftH";
		this.right.className = "NFMultiSelectRightH";
		this.bottomLeft.className = "NFMultiSelectBottomLeft NFh";
		this.bottomRight.className = "NFMultiSelectBottom NFhr";
	}
	el.onblur = function() {
		this.topLeft.className = "NFMultiSelectTopLeft";
		this.topRight.className = "NFMultiSelectTop";
		this.left.className = "NFMultiSelectLeft";
		this.right.className = "NFMultiSelectRight";
		this.bottomLeft.className = "NFMultiSelectBottomLeft";
		this.bottomRight.className = "NFMultiSelectBottom";
	}
}
function option(el, no) { //extend Options
	el.li = document.createElement('li');
	el.lnk = document.createElement('a');
	el.lnk.href = "javascript:;";
	el.lnk.ref = el.parentNode;
	el.lnk.pos = no;
	el.lnk._onclick = el.onclick || function () {};
	el.txt = document.createTextNode(el.text);
	el.lnk.appendChild(el.txt);
	el.li.appendChild(el.lnk);
}

//Get Position
function findPosY(obj) {
	var posTop = 0;
	do {posTop += obj.offsetTop;} while (obj = obj.offsetParent);
	return posTop;
}
function findPosX(obj) {
	var posLeft = 0;
	do {posLeft += obj.offsetLeft;} while (obj = obj.offsetParent);
	return posLeft;
}
//Get Siblings
function getInputsByName(name) {
	var inputs = document.getElementsByTagName("input");
	var w = 0; var results = new Array();
	for(var q = 0; q < inputs.length; q++) {if(inputs[q].name == name) {results[w] = inputs[q]; ++w;}}
	return results;
}

//Add events
var existingLoadEvent = window.onload || function () {};
var existingResizeEvent = window.onresize || function() {};
window.onload = function () {
    existingLoadEvent();
    NFInit();
}
window.onresize = function() {
	if(resizeTest != document.documentElement.clientHeight) {
		existingResizeEvent();
		NFFix();
	}
	resizeTest = document.documentElement.clientHeight;
}

