<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8585651</id><updated>2011-07-28T18:13:48.852-07:00</updated><title type='text'>Links of Random Interest</title><subtitle type='html'>Often I come across interesting web items. I figured a blog format would be the easiest way to share the information, so here it is. </subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nitricacid.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nitricacid.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Max</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8585651.post-8509884205609396052</id><published>2009-05-17T17:33:00.000-07:00</published><updated>2009-05-24T14:05:49.239-07:00</updated><title type='text'>Flot Test 1</title><content type='html'>&lt;script language="javascript" type="text/javascript"&gt;
//&lt;![CDATA[
if(!window.CanvasRenderingContext2D){(function(){var m=Math;var mr=m.round;var ms=m.sin;var mc=m.cos;var Z=10;var Z2=Z/2;var G_vmlCanvasManager_={init:function(opt_doc){var doc=opt_doc||document;if(/MSIE/.test(navigator.userAgent)&amp;&amp;!window.opera){var self=this;doc.attachEvent("onreadystatechange",function(){self.init_(doc)})}},init_:function(doc){if(doc.readyState=="complete"){if(!doc.namespaces["g_vml_"]){doc.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml")}var ss=doc.createStyleSheet();ss.cssText="canvas{display:inline-block;overflow:hidden;"+"text-align:left;width:300px;height:150px}"+"g_vml_\\:*{behavior:url(#default#VML)}";var els=doc.getElementsByTagName("canvas");for(var i=0;i&lt;els.length;i++){if(!els[i].getContext){this.initElement(els[i])}}}},fixElement_:function(el){var outerHTML=el.outerHTML;var newEl=el.ownerDocument.createElement(outerHTML);if(outerHTML.slice(-2)!="/&gt;"){var tagName="/"+el.tagName;var ns;while((ns=el.nextSibling)&amp;&amp;ns.tagName!=tagName){ns.removeNode()}if(ns){ns.removeNode()}}el.parentNode.replaceChild(newEl,el);return newEl},initElement:function(el){el=this.fixElement_(el);el.getContext=function(){if(this.context_){return this.context_}return this.context_=new CanvasRenderingContext2D_(this)};el.attachEvent('onpropertychange',onPropertyChange);el.attachEvent('onresize',onResize);var attrs=el.attributes;if(attrs.width&amp;&amp;attrs.width.specified){el.style.width=attrs.width.nodeValue+"px"}else{el.width=el.clientWidth}if(attrs.height&amp;&amp;attrs.height.specified){el.style.height=attrs.height.nodeValue+"px"}else{el.height=el.clientHeight}return el}};function onPropertyChange(e){var el=e.srcElement;switch(e.propertyName){case'width':el.style.width=el.attributes.width.nodeValue+"px";el.getContext().clearRect();break;case'height':el.style.height=el.attributes.height.nodeValue+"px";el.getContext().clearRect();break}}function onResize(e){var el=e.srcElement;if(el.firstChild){el.firstChild.style.width=el.clientWidth+'px';el.firstChild.style.height=el.clientHeight+'px'}}G_vmlCanvasManager_.init();var dec2hex=[];for(var i=0;i&lt;16;i++){for(var j=0;j&lt;16;j++){dec2hex[i*16+j]=i.toString(16)+j.toString(16)}}function createMatrixIdentity(){return[[1,0,0],[0,1,0],[0,0,1]]}function matrixMultiply(m1,m2){var result=createMatrixIdentity();for(var x=0;x&lt;3;x++){for(var y=0;y&lt;3;y++){var sum=0;for(var z=0;z&lt;3;z++){sum+=m1[x][z]*m2[z][y]}result[x][y]=sum}}return result}function copyState(o1,o2){o2.fillStyle=o1.fillStyle;o2.lineCap=o1.lineCap;o2.lineJoin=o1.lineJoin;o2.lineWidth=o1.lineWidth;o2.miterLimit=o1.miterLimit;o2.shadowBlur=o1.shadowBlur;o2.shadowColor=o1.shadowColor;o2.shadowOffsetX=o1.shadowOffsetX;o2.shadowOffsetY=o1.shadowOffsetY;o2.strokeStyle=o1.strokeStyle;o2.arcScaleX_=o1.arcScaleX_;o2.arcScaleY_=o1.arcScaleY_}function processStyle(styleString){var str,alpha=1;styleString=String(styleString);if(styleString.substring(0,3)=="rgb"){var start=styleString.indexOf("(",3);var end=styleString.indexOf(")",start+1);var guts=styleString.substring(start+1,end).split(",");str="#";for(var i=0;i&lt;3;i++){str+=dec2hex[Number(guts[i])]}if((guts.length==4)&amp;&amp;(styleString.substr(3,1)=="a")){alpha=guts[3]}}else{str=styleString}return[str,alpha]}function processLineCap(lineCap){switch(lineCap){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function CanvasRenderingContext2D_(surfaceElement){this.m_=createMatrixIdentity();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=Z*1;this.globalAlpha=1;this.canvas=surfaceElement;var el=surfaceElement.ownerDocument.createElement('div');el.style.width=surfaceElement.clientWidth+'px';el.style.height=surfaceElement.clientHeight+'px';el.style.overflow='hidden';el.style.position='absolute';surfaceElement.appendChild(el);this.element_=el;this.arcScaleX_=1;this.arcScaleY_=1}var contextPrototype=CanvasRenderingContext2D_.prototype;contextPrototype.clearRect=function(){this.element_.innerHTML="";this.currentPath_=[]};contextPrototype.beginPath=function(){this.currentPath_=[]};contextPrototype.moveTo=function(aX,aY){this.currentPath_.push({type:"moveTo",x:aX,y:aY});this.currentX_=aX;this.currentY_=aY};contextPrototype.lineTo=function(aX,aY){this.currentPath_.push({type:"lineTo",x:aX,y:aY});this.currentX_=aX;this.currentY_=aY};contextPrototype.bezierCurveTo=function(aCP1x,aCP1y,aCP2x,aCP2y,aX,aY){this.currentPath_.push({type:"bezierCurveTo",cp1x:aCP1x,cp1y:aCP1y,cp2x:aCP2x,cp2y:aCP2y,x:aX,y:aY});this.currentX_=aX;this.currentY_=aY};contextPrototype.quadraticCurveTo=function(aCPx,aCPy,aX,aY){var cp1x=this.currentX_+2.0/3.0*(aCPx-this.currentX_);var cp1y=this.currentY_+2.0/3.0*(aCPy-this.currentY_);var cp2x=cp1x+(aX-this.currentX_)/3.0;var cp2y=cp1y+(aY-this.currentY_)/3.0;this.bezierCurveTo(cp1x,cp1y,cp2x,cp2y,aX,aY)};contextPrototype.arc=function(aX,aY,aRadius,aStartAngle,aEndAngle,aClockwise){aRadius*=Z;var arcType=aClockwise?"at":"wa";var xStart=aX+(mc(aStartAngle)*aRadius)-Z2;var yStart=aY+(ms(aStartAngle)*aRadius)-Z2;var xEnd=aX+(mc(aEndAngle)*aRadius)-Z2;var yEnd=aY+(ms(aEndAngle)*aRadius)-Z2;if(xStart==xEnd&amp;&amp;!aClockwise){xStart+=0.125}this.currentPath_.push({type:arcType,x:aX,y:aY,radius:aRadius,xStart:xStart,yStart:yStart,xEnd:xEnd,yEnd:yEnd})};contextPrototype.rect=function(aX,aY,aWidth,aHeight){this.moveTo(aX,aY);this.lineTo(aX+aWidth,aY);this.lineTo(aX+aWidth,aY+aHeight);this.lineTo(aX,aY+aHeight);this.closePath()};contextPrototype.strokeRect=function(aX,aY,aWidth,aHeight){this.beginPath();this.moveTo(aX,aY);this.lineTo(aX+aWidth,aY);this.lineTo(aX+aWidth,aY+aHeight);this.lineTo(aX,aY+aHeight);this.closePath();this.stroke()};contextPrototype.fillRect=function(aX,aY,aWidth,aHeight){this.beginPath();this.moveTo(aX,aY);this.lineTo(aX+aWidth,aY);this.lineTo(aX+aWidth,aY+aHeight);this.lineTo(aX,aY+aHeight);this.closePath();this.fill()};contextPrototype.createLinearGradient=function(aX0,aY0,aX1,aY1){var gradient=new CanvasGradient_("gradient");return gradient};contextPrototype.createRadialGradient=function(aX0,aY0,aR0,aX1,aY1,aR1){var gradient=new CanvasGradient_("gradientradial");gradient.radius1_=aR0;gradient.radius2_=aR1;gradient.focus_.x=aX0;gradient.focus_.y=aY0;return gradient};contextPrototype.drawImage=function(image,var_args){var dx,dy,dw,dh,sx,sy,sw,sh;var oldRuntimeWidth=image.runtimeStyle.width;var oldRuntimeHeight=image.runtimeStyle.height;image.runtimeStyle.width='auto';image.runtimeStyle.height='auto';var w=image.width;var h=image.height;image.runtimeStyle.width=oldRuntimeWidth;image.runtimeStyle.height=oldRuntimeHeight;if(arguments.length==3){dx=arguments[1];dy=arguments[2];sx=sy=0;sw=dw=w;sh=dh=h}else if(arguments.length==5){dx=arguments[1];dy=arguments[2];dw=arguments[3];dh=arguments[4];sx=sy=0;sw=w;sh=h}else if(arguments.length==9){sx=arguments[1];sy=arguments[2];sw=arguments[3];sh=arguments[4];dx=arguments[5];dy=arguments[6];dw=arguments[7];dh=arguments[8]}else{throw"Invalid number of arguments";}var d=this.getCoords_(dx,dy);var w2=sw/2;var h2=sh/2;var vmlStr=[];var W=10;var H=10;vmlStr.push(' &lt;g_vml_:group',' coordsize="',Z*W,',',Z*H,'"',' coordorigin="0,0"',' style="width:',W,';height:',H,';position:absolute;');if(this.m_[0][0]!=1||this.m_[0][1]){var filter=[];filter.push("M11='",this.m_[0][0],"',","M12='",this.m_[1][0],"',","M21='",this.m_[0][1],"',","M22='",this.m_[1][1],"',","Dx='",mr(d.x/Z),"',","Dy='",mr(d.y/Z),"'");var max=d;var c2=this.getCoords_(dx+dw,dy);var c3=this.getCoords_(dx,dy+dh);var c4=this.getCoords_(dx+dw,dy+dh);max.x=Math.max(max.x,c2.x,c3.x,c4.x);max.y=Math.max(max.y,c2.y,c3.y,c4.y);vmlStr.push("padding:0 ",mr(max.x/Z),"px ",mr(max.y/Z),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",filter.join(""),", sizingmethod='clip');")}else{vmlStr.push("top:",mr(d.y/Z),"px;left:",mr(d.x/Z),"px;")}vmlStr.push(' "&gt;','&lt;g_vml_:image src="',image.src,'"',' style="width:',Z*dw,';',' height:',Z*dh,';"',' cropleft="',sx/w,'"',' croptop="',sy/h,'"',' cropright="',(w-sx-sw)/w,'"',' cropbottom="',(h-sy-sh)/h,'"',' /&gt;','&lt;/g_vml_:group&gt;');this.element_.insertAdjacentHTML("BeforeEnd",vmlStr.join(""))};contextPrototype.stroke=function(aFill){var lineStr=[];var lineOpen=false;var a=processStyle(aFill?this.fillStyle:this.strokeStyle);var color=a[0];var opacity=a[1]*this.globalAlpha;var W=10;var H=10;lineStr.push('&lt;g_vml_:shape',' fillcolor="',color,'"',' filled="',Boolean(aFill),'"',' style="position:absolute;width:',W,';height:',H,';"',' coordorigin="0 0" coordsize="',Z*W,' ',Z*H,'"',' stroked="',!aFill,'"',' strokeweight="',this.lineWidth,'"',' strokecolor="',color,'"',' path="');var newSeq=false;var min={x:null,y:null};var max={x:null,y:null};for(var i=0;i&lt;this.currentPath_.length;i++){var p=this.currentPath_[i];if(p.type=="moveTo"){lineStr.push(" m ");var c=this.getCoords_(p.x,p.y);lineStr.push(mr(c.x),",",mr(c.y))}else if(p.type=="lineTo"){lineStr.push(" l ");var c=this.getCoords_(p.x,p.y);lineStr.push(mr(c.x),",",mr(c.y))}else if(p.type=="close"){lineStr.push(" x ")}else if(p.type=="bezierCurveTo"){lineStr.push(" c ");var c=this.getCoords_(p.x,p.y);var c1=this.getCoords_(p.cp1x,p.cp1y);var c2=this.getCoords_(p.cp2x,p.cp2y);lineStr.push(mr(c1.x),",",mr(c1.y),",",mr(c2.x),",",mr(c2.y),",",mr(c.x),",",mr(c.y))}else if(p.type=="at"||p.type=="wa"){lineStr.push(" ",p.type," ");var c=this.getCoords_(p.x,p.y);var cStart=this.getCoords_(p.xStart,p.yStart);var cEnd=this.getCoords_(p.xEnd,p.yEnd);lineStr.push(mr(c.x-this.arcScaleX_*p.radius),",",mr(c.y-this.arcScaleY_*p.radius)," ",mr(c.x+this.arcScaleX_*p.radius),",",mr(c.y+this.arcScaleY_*p.radius)," ",mr(cStart.x),",",mr(cStart.y)," ",mr(cEnd.x),",",mr(cEnd.y))}if(c){if(min.x==null||c.x&lt;min.x){min.x=c.x}if(max.x==null||c.x&gt;max.x){max.x=c.x}if(min.y==null||c.y&lt;min.y){min.y=c.y}if(max.y==null||c.y&gt;max.y){max.y=c.y}}}lineStr.push(' "&gt;');if(typeof this.fillStyle=="object"){var focus={x:"50%",y:"50%"};var width=(max.x-min.x);var height=(max.y-min.y);var dimension=(width&gt;height)?width:height;focus.x=mr((this.fillStyle.focus_.x/width)*100+50)+"%";focus.y=mr((this.fillStyle.focus_.y/height)*100+50)+"%";var colors=[];if(this.fillStyle.type_=="gradientradial"){var inside=(this.fillStyle.radius1_/dimension*100);var expansion=(this.fillStyle.radius2_/dimension*100)-inside}else{var inside=0;var expansion=100}var insidecolor={offset:null,color:null};var outsidecolor={offset:null,color:null};this.fillStyle.colors_.sort(function(cs1,cs2){return cs1.offset-cs2.offset});for(var i=0;i&lt;this.fillStyle.colors_.length;i++){var fs=this.fillStyle.colors_[i];colors.push((fs.offset*expansion)+inside,"% ",fs.color,",");if(fs.offset&gt;insidecolor.offset||insidecolor.offset==null){insidecolor.offset=fs.offset;insidecolor.color=fs.color}if(fs.offset&lt;outsidecolor.offset||outsidecolor.offset==null){outsidecolor.offset=fs.offset;outsidecolor.color=fs.color}}colors.pop();lineStr.push('&lt;g_vml_:fill',' color="',outsidecolor.color,'"',' color2="',insidecolor.color,'"',' type="',this.fillStyle.type_,'"',' focusposition="',focus.x,', ',focus.y,'"',' colors="',colors.join(""),'"',' opacity="',opacity,'" /&gt;')}else if(aFill){lineStr.push('&lt;g_vml_:fill color="',color,'" opacity="',opacity,'" /&gt;')}else{lineStr.push('&lt;g_vml_:stroke',' opacity="',opacity,'"',' joinstyle="',this.lineJoin,'"',' miterlimit="',this.miterLimit,'"',' endcap="',processLineCap(this.lineCap),'"',' weight="',this.lineWidth,'px"',' color="',color,'" /&gt;')}lineStr.push("&lt;/g_vml_:shape&gt;");this.element_.insertAdjacentHTML("beforeEnd",lineStr.join(""))};contextPrototype.fill=function(){this.stroke(true)};contextPrototype.closePath=function(){this.currentPath_.push({type:"close"})};contextPrototype.getCoords_=function(aX,aY){return{x:Z*(aX*this.m_[0][0]+aY*this.m_[1][0]+this.m_[2][0])-Z2,y:Z*(aX*this.m_[0][1]+aY*this.m_[1][1]+this.m_[2][1])-Z2}};contextPrototype.save=function(){var o={};copyState(this,o);this.aStack_.push(o);this.mStack_.push(this.m_);this.m_=matrixMultiply(createMatrixIdentity(),this.m_)};contextPrototype.restore=function(){copyState(this.aStack_.pop(),this);this.m_=this.mStack_.pop()};contextPrototype.translate=function(aX,aY){var m1=[[1,0,0],[0,1,0],[aX,aY,1]];this.m_=matrixMultiply(m1,this.m_)};contextPrototype.rotate=function(aRot){var c=mc(aRot);var s=ms(aRot);var m1=[[c,s,0],[-s,c,0],[0,0,1]];this.m_=matrixMultiply(m1,this.m_)};contextPrototype.scale=function(aX,aY){this.arcScaleX_*=aX;this.arcScaleY_*=aY;var m1=[[aX,0,0],[0,aY,0],[0,0,1]];this.m_=matrixMultiply(m1,this.m_)};contextPrototype.clip=function(){};contextPrototype.arcTo=function(){};contextPrototype.createPattern=function(){return new CanvasPattern_};function CanvasGradient_(aType){this.type_=aType;this.radius1_=0;this.radius2_=0;this.colors_=[];this.focus_={x:0,y:0}}CanvasGradient_.prototype.addColorStop=function(aOffset,aColor){aColor=processStyle(aColor);this.colors_.push({offset:1-aOffset,color:aColor})};function CanvasPattern_(){}G_vmlCanvasManager=G_vmlCanvasManager_;CanvasRenderingContext2D=CanvasRenderingContext2D_;CanvasGradient=CanvasGradient_;CanvasPattern=CanvasPattern_})()}

(function(){

if ( window.jQuery )
	var _jQuery = window.jQuery;

var jQuery = window.jQuery = function( selector, context ) {

	return new jQuery.prototype.init( selector, context );
};


if ( window.$ )
	var _$ = window.$;
	

window.$ = jQuery;


var quickExpr = /^[^&lt;]*(&lt;(.|\s)+&gt;)[^&gt;]*$|^#(\w+)$/;

var isSimple = /^.[^:#\[\.]*$/;

jQuery.fn = jQuery.prototype = {
	init: function( selector, context ) {
		
		selector = selector || document;

		
		if ( selector.nodeType ) {
			this[0] = selector;
			this.length = 1;
			return this;

	
		} else if ( typeof selector == "string" ) {
			
			var match = quickExpr.exec( selector );

			if ( match &amp;&amp; (match[1] || !context) ) {

				
				if ( match[1] )
					selector = jQuery.clean( [ match[1] ], context );

				
				else {
					var elem = document.getElementById( match[3] );

					
					if ( elem )
						
						if ( elem.id != match[3] )
							return jQuery().find( selector );

						
						else {
							this[0] = elem;
							this.length = 1;
							return this;
						}

					else
						selector = [];
				}

			} else
				return new jQuery( context ).find( selector );

	
		} else if ( jQuery.isFunction( selector ) )
			return new jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector );

		return this.setArray(
		
			selector.constructor == Array &amp;&amp; selector ||

			(selector.jquery || selector.length &amp;&amp; selector != window &amp;&amp; !selector.nodeType &amp;&amp; selector[0] != undefined &amp;&amp; selector[0].nodeType) &amp;&amp; jQuery.makeArray( selector ) ||

		
			[ selector ] );
	},
	

	jquery: "1.2.3",


	size: function() {
		return this.length;
	},
	
	
	length: 0,

	get: function( num ) {
		return num == undefined ?

		
			jQuery.makeArray( this ) :

			
			this[ num ];
	},
	

	pushStack: function( elems ) {
	
		var ret = jQuery( elems );

	
		ret.prevObject = this;

		return ret;
	},
	
	
	setArray: function( elems ) {
	
		this.length = 0;
		Array.prototype.push.apply( this, elems );
		
		return this;
	},


	each: function( callback, args ) {
		return jQuery.each( this, callback, args );
	},

	
	index: function( elem ) {
		var ret = -1;

		this.each(function(i){
			if ( this == elem )
				ret = i;
		});

		return ret;
	},

	attr: function( name, value, type ) {
		var options = name;
		
		
		if ( name.constructor == String )
			if ( value == undefined )
				return this.length &amp;&amp; jQuery[ type || "attr" ]( this[0], name ) || undefined;

			else {
				options = {};
				options[ name ] = value;
			}
		
		return this.each(function(i){
			
			for ( name in options )
				jQuery.attr(
					type ?
						this.style :
						this,
					name, jQuery.prop( this, options[ name ], type, i, name )
				);
		});
	},

	css: function( key, value ) {
		
		if ( (key == 'width' || key == 'height') &amp;&amp; parseFloat(value) &lt; 0 )
			value = undefined;
		return this.attr( key, value, "curCSS" );
	},

	text: function( text ) {
		if ( typeof text != "object" &amp;&amp; text != null )
			return this.empty().append( (this[0] &amp;&amp; this[0].ownerDocument || document).createTextNode( text ) );

		var ret = "";

		jQuery.each( text || this, function(){
			jQuery.each( this.childNodes, function(){
				if ( this.nodeType != 8 )
					ret += this.nodeType != 1 ?
						this.nodeValue :
						jQuery.fn.text( [ this ] );
			});
		});

		return ret;
	},

	wrapAll: function( html ) {
		if ( this[0] )
			
			jQuery( html, this[0].ownerDocument )
				.clone()
				.insertBefore( this[0] )
				.map(function(){
					var elem = this;

					while ( elem.firstChild )
						elem = elem.firstChild;

					return elem;
				})
				.append(this);

		return this;
	},

	wrapInner: function( html ) {
		return this.each(function(){
			jQuery( this ).contents().wrapAll( html );
		});
	},

	wrap: function( html ) {
		return this.each(function(){
			jQuery( this ).wrapAll( html );
		});
	},

	append: function() {
		return this.domManip(arguments, true, false, function(elem){
			if (this.nodeType == 1)
				this.appendChild( elem );
		});
	},

	prepend: function() {
		return this.domManip(arguments, true, true, function(elem){
			if (this.nodeType == 1)
				this.insertBefore( elem, this.firstChild );
		});
	},
	
	before: function() {
		return this.domManip(arguments, false, false, function(elem){
			this.parentNode.insertBefore( elem, this );
		});
	},

	after: function() {
		return this.domManip(arguments, false, true, function(elem){
			this.parentNode.insertBefore( elem, this.nextSibling );
		});
	},

	end: function() {
		return this.prevObject || jQuery( [] );
	},

	find: function( selector ) {
		var elems = jQuery.map(this, function(elem){
			return jQuery.find( selector, elem );
		});

		return this.pushStack( /[^+&gt;] [^+&gt;]/.test( selector ) || selector.indexOf("..") &gt; -1 ?
			jQuery.unique( elems ) :
			elems );
	},

	clone: function( events ) {
		
		var ret = this.map(function(){
			if ( jQuery.browser.msie &amp;&amp; !jQuery.isXMLDoc(this) ) {
			
				var clone = this.cloneNode(true),
					container = document.createElement("div");
				container.appendChild(clone);
				return jQuery.clean([container.innerHTML])[0];
			} else
				return this.cloneNode(true);
		});

		var clone = ret.find("*").andSelf().each(function(){
			if ( this[ expando ] != undefined )
				this[ expando ] = null;
		});
		
		
		if ( events === true )
			this.find("*").andSelf().each(function(i){
				if (this.nodeType == 3)
					return;
				var events = jQuery.data( this, "events" );

				for ( var type in events )
					for ( var handler in events[ type ] )
						jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data );
			});

		
		return ret;
	},

	filter: function( selector ) {
		return this.pushStack(
			jQuery.isFunction( selector ) &amp;&amp;
			jQuery.grep(this, function(elem, i){
				return selector.call( elem, i );
			}) ||

			jQuery.multiFilter( selector, this ) );
	},

	not: function( selector ) {
		if ( selector.constructor == String )
			
			if ( isSimple.test( selector ) )
				return this.pushStack( jQuery.multiFilter( selector, this, true ) );
			else
				selector = jQuery.multiFilter( selector, this );

		var isArrayLike = selector.length &amp;&amp; selector[selector.length - 1] !== undefined &amp;&amp; !selector.nodeType;
		return this.filter(function() {
			return isArrayLike ? jQuery.inArray( this, selector ) &lt; 0 : this != selector;
		});
	},

	add: function( selector ) {
		return !selector ? this : this.pushStack( jQuery.merge( 
			this.get(),
			selector.constructor == String ? 
				jQuery( selector ).get() :
				selector.length != undefined &amp;&amp; (!selector.nodeName || jQuery.nodeName(selector, "form")) ?
					selector : [selector] ) );
	},

	is: function( selector ) {
		return selector ?
			jQuery.multiFilter( selector, this ).length &gt; 0 :
			false;
	},

	hasClass: function( selector ) {
		return this.is( "." + selector );
	},
	
	val: function( value ) {
		if ( value == undefined ) {

			if ( this.length ) {
				var elem = this[0];

				
				if ( jQuery.nodeName( elem, "select" ) ) {
					var index = elem.selectedIndex,
						values = [],
						options = elem.options,
						one = elem.type == "select-one";
					
					
					if ( index &lt; 0 )
						return null;

					
					for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i &lt; max; i++ ) {
						var option = options[ i ];

						if ( option.selected ) {
							
							value = jQuery.browser.msie &amp;&amp; !option.attributes.value.specified ? option.text : option.value;
							
						
							if ( one )
								return value;
							
							
							values.push( value );
						}
					}
					
					return values;
					
				
				} else
					return (this[0].value || "").replace(/\r/g, "");

			}

			return undefined;
		}

		return this.each(function(){
			if ( this.nodeType != 1 )
				return;

			if ( value.constructor == Array &amp;&amp; /radio|checkbox/.test( this.type ) )
				this.checked = (jQuery.inArray(this.value, value) &gt;= 0 ||
					jQuery.inArray(this.name, value) &gt;= 0);

			else if ( jQuery.nodeName( this, "select" ) ) {
				var values = value.constructor == Array ?
					value :
					[ value ];

				jQuery( "option", this ).each(function(){
					this.selected = (jQuery.inArray( this.value, values ) &gt;= 0 ||
						jQuery.inArray( this.text, values ) &gt;= 0);
				});

				if ( !values.length )
					this.selectedIndex = -1;

			} else
				this.value = value;
		});
	},
	
	html: function( value ) {
		return value == undefined ?
			(this.length ?
				this[0].innerHTML :
				null) :
			this.empty().append( value );
	},

	replaceWith: function( value ) {
		return this.after( value ).remove();
	},

	eq: function( i ) {
		return this.slice( i, i + 1 );
	},

	slice: function() {
		return this.pushStack( Array.prototype.slice.apply( this, arguments ) );
	},

	map: function( callback ) {
		return this.pushStack( jQuery.map(this, function(elem, i){
			return callback.call( elem, i, elem );
		}));
	},

	andSelf: function() {
		return this.add( this.prevObject );
	},

	data: function( key, value ){
		var parts = key.split(".");
		parts[1] = parts[1] ? "." + parts[1] : "";

		if ( value == null ) {
			var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
			
			if ( data == undefined &amp;&amp; this.length )
				data = jQuery.data( this[0], key );

			return data == null &amp;&amp; parts[1] ?
				this.data( parts[0] ) :
				data;
		} else
			return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
				jQuery.data( this, key, value );
			});
	},

	removeData: function( key ){
		return this.each(function(){
			jQuery.removeData( this, key );
		});
	},
	
	domManip: function( args, table, reverse, callback ) {
		var clone = this.length &gt; 1, elems; 

		return this.each(function(){
			if ( !elems ) {
				elems = jQuery.clean( args, this.ownerDocument );

				if ( reverse )
					elems.reverse();
			}

			var obj = this;

			if ( table &amp;&amp; jQuery.nodeName( this, "table" ) &amp;&amp; jQuery.nodeName( elems[0], "tr" ) )
				obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") );

			var scripts = jQuery( [] );

			jQuery.each(elems, function(){
				var elem = clone ?
					jQuery( this ).clone( true )[0] :
					this;

			
				if ( jQuery.nodeName( elem, "script" ) ) {
					scripts = scripts.add( elem );
				} else {
				
					if ( elem.nodeType == 1 )
						scripts = scripts.add( jQuery( "script", elem ).remove() );

					
					callback.call( obj, elem );
				}
			});

			scripts.each( evalScript );
		});
	}
};


jQuery.prototype.init.prototype = jQuery.prototype;

function evalScript( i, elem ) {
	if ( elem.src )
		jQuery.ajax({
			url: elem.src,
			async: false,
			dataType: "script"
		});

	else
		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );

	if ( elem.parentNode )
		elem.parentNode.removeChild( elem );
}

jQuery.extend = jQuery.fn.extend = function() {
	
	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;

	
	if ( target.constructor == Boolean ) {
		deep = target;
		target = arguments[1] || {};
		
		i = 2;
	}


	if ( typeof target != "object" &amp;&amp; typeof target != "function" )
		target = {};

	
	if ( length == 1 ) {
		target = this;
		i = 0;
	}

	for ( ; i &lt; length; i++ )
		
		if ( (options = arguments[ i ]) != null )
			
			for ( var name in options ) {
				
				if ( target === options[ name ] )
					continue;

				
				if ( deep &amp;&amp; options[ name ] &amp;&amp; typeof options[ name ] == "object" &amp;&amp; target[ name ] &amp;&amp; !options[ name ].nodeType )
					target[ name ] = jQuery.extend( target[ name ], options[ name ] );

				
				else if ( options[ name ] != undefined )
					target[ name ] = options[ name ];

			}

	
	return target;
};

var expando = "jQuery" + (new Date()).getTime(), uuid = 0, windowData = {};


var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i;

jQuery.extend({
	noConflict: function( deep ) {
		window.$ = _$;

		if ( deep )
			window.jQuery = _jQuery;

		return jQuery;
	},

	
	isFunction: function( fn ) {
		return !!fn &amp;&amp; typeof fn != "string" &amp;&amp; !fn.nodeName &amp;&amp; 
			fn.constructor != Array &amp;&amp; /function/i.test( fn + "" );
	},
	
	
	isXMLDoc: function( elem ) {
		return elem.documentElement &amp;&amp; !elem.body ||
			elem.tagName &amp;&amp; elem.ownerDocument &amp;&amp; !elem.ownerDocument.body;
	},


	globalEval: function( data ) {
		data = jQuery.trim( data );

		if ( data ) {
			
			var head = document.getElementsByTagName("head")[0] || document.documentElement,
				script = document.createElement("script");

			script.type = "text/javascript";
			if ( jQuery.browser.msie )
				script.text = data;
			else
				script.appendChild( document.createTextNode( data ) );

			head.appendChild( script );
			head.removeChild( script );
		}
	},

	nodeName: function( elem, name ) {
		return elem.nodeName &amp;&amp; elem.nodeName.toUpperCase() == name.toUpperCase();
	},
	
	cache: {},
	
	data: function( elem, name, data ) {
		elem = elem == window ?
			windowData :
			elem;

		var id = elem[ expando ];

		
		if ( !id ) 
			id = elem[ expando ] = ++uuid;

	
		if ( name &amp;&amp; !jQuery.cache[ id ] )
			jQuery.cache[ id ] = {};
		
		
		if ( data != undefined )
			jQuery.cache[ id ][ name ] = data;
		
	
		return name ?
			jQuery.cache[ id ][ name ] :
			id;
	},
	
	removeData: function( elem, name ) {
		elem = elem == window ?
			windowData :
			elem;

		var id = elem[ expando ];

	
		if ( name ) {
			if ( jQuery.cache[ id ] ) {
			
				delete jQuery.cache[ id ][ name ];

				name = "";

				for ( name in jQuery.cache[ id ] )
					break;

				if ( !name )
					jQuery.removeData( elem );
			}

		
		} else {
			
			try {
				delete elem[ expando ];
			} catch(e){
				
				if ( elem.removeAttribute )
					elem.removeAttribute( expando );
			}

			
			delete jQuery.cache[ id ];
		}
	},

	
	each: function( object, callback, args ) {
		if ( args ) {
			if ( object.length == undefined ) {
				for ( var name in object )
					if ( callback.apply( object[ name ], args ) === false )
						break;
			} else
				for ( var i = 0, length = object.length; i &lt; length; i++ )
					if ( callback.apply( object[ i ], args ) === false )
						break;

		} else {
			if ( object.length == undefined ) {
				for ( var name in object )
					if ( callback.call( object[ name ], name, object[ name ] ) === false )
						break;
			} else
				for ( var i = 0, length = object.length, value = object[0]; 
					i &lt; length &amp;&amp; callback.call( value, i, value ) !== false; value = object[++i] ){}
		}

		return object;
	},
	
	prop: function( elem, value, type, i, name ) {
			
			if ( jQuery.isFunction( value ) )
				value = value.call( elem, i );
				
			
			return value &amp;&amp; value.constructor == Number &amp;&amp; type == "curCSS" &amp;&amp; !exclude.test( name ) ?
				value + "px" :
				value;
	},

	className: {
		
		add: function( elem, classNames ) {
			jQuery.each((classNames || "").split(/\s+/), function(i, className){
				if ( elem.nodeType == 1 &amp;&amp; !jQuery.className.has( elem.className, className ) )
					elem.className += (elem.className ? " " : "") + className;
			});
		},

		
		remove: function( elem, classNames ) {
			if (elem.nodeType == 1)
				elem.className = classNames != undefined ?
					jQuery.grep(elem.className.split(/\s+/), function(className){
						return !jQuery.className.has( classNames, className );	
					}).join(" ") :
					"";
		},

		
		has: function( elem, className ) {
			return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) &gt; -1;
		}
	},

	
	swap: function( elem, options, callback ) {
		var old = {};
		
		for ( var name in options ) {
			old[ name ] = elem.style[ name ];
			elem.style[ name ] = options[ name ];
		}

		callback.call( elem );

		for ( var name in options )
			elem.style[ name ] = old[ name ];
	},

	css: function( elem, name, force ) {
		if ( name == "width" || name == "height" ) {
			var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
		
			function getWH() {
				val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
				var padding = 0, border = 0;
				jQuery.each( which, function() {
					padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
					border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
				});
				val -= Math.round(padding + border);
			}
		
			if ( jQuery(elem).is(":visible") )
				getWH();
			else
				jQuery.swap( elem, props, getWH );
			
			return Math.max(0, val);
		}
		
		return jQuery.curCSS( elem, name, force );
	},

	curCSS: function( elem, name, force ) {
		var ret;

		
		function color( elem ) {
			if ( !jQuery.browser.safari )
				return false;

			var ret = document.defaultView.getComputedStyle( elem, null );
			return !ret || ret.getPropertyValue("color") == "";
		}

	
		if ( name == "opacity" &amp;&amp; jQuery.browser.msie ) {
			ret = jQuery.attr( elem.style, "opacity" );

			return ret == "" ?
				"1" :
				ret;
		}
		
		if ( jQuery.browser.opera &amp;&amp; name == "display" ) {
			var save = elem.style.outline;
			elem.style.outline = "0 solid black";
			elem.style.outline = save;
		}
		
		
		if ( name.match( /float/i ) )
			name = styleFloat;

		if ( !force &amp;&amp; elem.style &amp;&amp; elem.style[ name ] )
			ret = elem.style[ name ];

		else if ( document.defaultView &amp;&amp; document.defaultView.getComputedStyle ) {

			if ( name.match( /float/i ) )
				name = "float";

			name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();

			var getComputedStyle = document.defaultView.getComputedStyle( elem, null );

			if ( getComputedStyle &amp;&amp; !color( elem ) )
				ret = getComputedStyle.getPropertyValue( name );

			
			else {
				var swap = [], stack = [];

				
				for ( var a = elem; a &amp;&amp; color(a); a = a.parentNode )
					stack.unshift(a);

				
				for ( var i = 0; i &lt; stack.length; i++ )
					if ( color( stack[ i ] ) ) {
						swap[ i ] = stack[ i ].style.display;
						stack[ i ].style.display = "block";
					}

				
				ret = name == "display" &amp;&amp; swap[ stack.length - 1 ] != null ?
					"none" :
					( getComputedStyle &amp;&amp; getComputedStyle.getPropertyValue( name ) ) || "";

				for ( var i = 0; i &lt; swap.length; i++ )
					if ( swap[ i ] != null )
						stack[ i ].style.display = swap[ i ];
			}

			if ( name == "opacity" &amp;&amp; ret == "" )
				ret = "1";

		} else if ( elem.currentStyle ) {
			var camelCase = name.replace(/\-(\w)/g, function(all, letter){
				return letter.toUpperCase();
			});

			ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];

		
			if ( !/^\d+(px)?$/i.test( ret ) &amp;&amp; /^\d/.test( ret ) ) {
				
				var style = elem.style.left, runtimeStyle = elem.runtimeStyle.left;

				
				elem.runtimeStyle.left = elem.currentStyle.left;
				elem.style.left = ret || 0;
				ret = elem.style.pixelLeft + "px";

				
				elem.style.left = style;
				elem.runtimeStyle.left = runtimeStyle;
			}
		}

		return ret;
	},
	
	clean: function( elems, context ) {
		var ret = [];
		context = context || document;
		
		if (typeof context.createElement == 'undefined') 
			context = context.ownerDocument || context[0] &amp;&amp; context[0].ownerDocument || document;

		jQuery.each(elems, function(i, elem){
			if ( !elem )
				return;

			if ( elem.constructor == Number )
				elem = elem.toString();
			
			
			if ( typeof elem == "string" ) {
			
				elem = elem.replace(/(&lt;(\w+)[^&gt;]*?)\/&gt;/g, function(all, front, tag){
					return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
						all :
						front + "&gt;&lt;/" + tag + "&gt;";
				});

				
				var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div");

				var wrap =
					
					!tags.indexOf("&lt;opt") &amp;&amp;
					[ 1, "&lt;select multiple='multiple'&gt;", "&lt;/select&gt;" ] ||
					
					!tags.indexOf("&lt;leg") &amp;&amp;
					[ 1, "&lt;fieldset&gt;", "&lt;/fieldset&gt;" ] ||
					
					tags.match(/^&lt;(thead|tbody|tfoot|colg|cap)/) &amp;&amp;
					[ 1, "&lt;table&gt;", "&lt;/table&gt;" ] ||
					
					!tags.indexOf("&lt;tr") &amp;&amp;
					[ 2, "&lt;table&gt;&lt;tbody&gt;", "&lt;/tbody&gt;&lt;/table&gt;" ] ||
					
				
					(!tags.indexOf("&lt;td") || !tags.indexOf("&lt;th")) &amp;&amp;
					[ 3, "&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;", "&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" ] ||
					
					!tags.indexOf("&lt;col") &amp;&amp;
					[ 2, "&lt;table&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;colgroup&gt;", "&lt;/colgroup&gt;&lt;/table&gt;" ] ||

					
					jQuery.browser.msie &amp;&amp;
					[ 1, "div&lt;div&gt;", "&lt;/div&gt;" ] ||
					
					[ 0, "", "" ];

				
				div.innerHTML = wrap[1] + elem + wrap[2];
				
				while ( wrap[0]-- )
					div = div.lastChild;
				
				
				if ( jQuery.browser.msie ) {
					
					
					var tbody = !tags.indexOf("&lt;table") &amp;&amp; tags.indexOf("&lt;tbody") &lt; 0 ?
						div.firstChild &amp;&amp; div.firstChild.childNodes :
						
						wrap[1] == "&lt;table&gt;" &amp;&amp; tags.indexOf("&lt;tbody") &lt; 0 ?
							div.childNodes :
							[];
				
					for ( var j = tbody.length - 1; j &gt;= 0 ; --j )
						if ( jQuery.nodeName( tbody[ j ], "tbody" ) &amp;&amp; !tbody[ j ].childNodes.length )
							tbody[ j ].parentNode.removeChild( tbody[ j ] );
					
					if ( /^\s/.test( elem ) )	
						div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
				
				}
				
				elem = jQuery.makeArray( div.childNodes );
			}

			if ( elem.length === 0 &amp;&amp; (!jQuery.nodeName( elem, "form" ) &amp;&amp; !jQuery.nodeName( elem, "select" )) )
				return;

			if ( elem[0] == undefined || jQuery.nodeName( elem, "form" ) || elem.options )
				ret.push( elem );

			else
				ret = jQuery.merge( ret, elem );

		});

		return ret;
	},
	
	attr: function( elem, name, value ) {

		if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
			return undefined;

		var fix = jQuery.isXMLDoc( elem ) ?
			{} :
			jQuery.props;


		if ( name == "selected" &amp;&amp; jQuery.browser.safari )
			elem.parentNode.selectedIndex;
		

		if ( fix[ name ] ) {
			if ( value != undefined )
				elem[ fix[ name ] ] = value;

			return elem[ fix[ name ] ];

		} else if ( jQuery.browser.msie &amp;&amp; name == "style" )
			return jQuery.attr( elem.style, "cssText", value );

		else if ( value == undefined &amp;&amp; jQuery.browser.msie &amp;&amp; jQuery.nodeName( elem, "form" ) &amp;&amp; (name == "action" || name == "method") )
			return elem.getAttributeNode( name ).nodeValue;


		else if ( elem.tagName ) {

			if ( value != undefined ) {

				if ( name == "type" &amp;&amp; jQuery.nodeName( elem, "input" ) &amp;&amp; elem.parentNode )
					throw "type property can't be changed";

				elem.setAttribute( name, "" + value );
			}

			if ( jQuery.browser.msie &amp;&amp; /href|src/.test( name ) &amp;&amp; !jQuery.isXMLDoc( elem ) ) 
				return elem.getAttribute( name, 2 );

			return elem.getAttribute( name );

		} else {

			if ( name == "opacity" &amp;&amp; jQuery.browser.msie ) {
				if ( value != undefined ) {

			
					elem.zoom = 1; 
	
					
					elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
						(parseFloat( value ).toString() == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
				}
	
				return elem.filter &amp;&amp; elem.filter.indexOf("opacity=") &gt;= 0 ?
					(parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100).toString() :
					"";
			}

			name = name.replace(/-([a-z])/ig, function(all, letter){
				return letter.toUpperCase();
			});

			if ( value != undefined )
				elem[ name ] = value;

			return elem[ name ];
		}
	},
	
	trim: function( text ) {
		return (text || "").replace( /^\s+|\s+$/g, "" );
	},

	makeArray: function( array ) {
		var ret = [];

		
		if ( typeof array != "array" )
			for ( var i = 0, length = array.length; i &lt; length; i++ )
				ret.push( array[ i ] );
		else
			ret = array.slice( 0 );

		return ret;
	},

	inArray: function( elem, array ) {
		for ( var i = 0, length = array.length; i &lt; length; i++ )
			if ( array[ i ] == elem )
				return i;

		return -1;
	},

	merge: function( first, second ) {

		if ( jQuery.browser.msie ) {
			for ( var i = 0; second[ i ]; i++ )
				if ( second[ i ].nodeType != 8 )
					first.push( second[ i ] );

		} else
			for ( var i = 0; second[ i ]; i++ )
				first.push( second[ i ] );

		return first;
	},

	unique: function( array ) {
		var ret = [], done = {};

		try {

			for ( var i = 0, length = array.length; i &lt; length; i++ ) {
				var id = jQuery.data( array[ i ] );

				if ( !done[ id ] ) {
					done[ id ] = true;
					ret.push( array[ i ] );
				}
			}

		} catch( e ) {
			ret = array;
		}

		return ret;
	},

	grep: function( elems, callback, inv ) {
		var ret = [];

		
		for ( var i = 0, length = elems.length; i &lt; length; i++ )
			if ( !inv &amp;&amp; callback( elems[ i ], i ) || inv &amp;&amp; !callback( elems[ i ], i ) )
				ret.push( elems[ i ] );

		return ret;
	},

	map: function( elems, callback ) {
		var ret = [];

	
		for ( var i = 0, length = elems.length; i &lt; length; i++ ) {
			var value = callback( elems[ i ], i );

			if ( value !== null &amp;&amp; value != undefined ) {
				if ( value.constructor != Array )
					value = [ value ];

				ret = ret.concat( value );
			}
		}

		return ret;
	}
});

var userAgent = navigator.userAgent.toLowerCase();


jQuery.browser = {
	version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
	safari: /webkit/.test( userAgent ),
	opera: /opera/.test( userAgent ),
	msie: /msie/.test( userAgent ) &amp;&amp; !/opera/.test( userAgent ),
	mozilla: /mozilla/.test( userAgent ) &amp;&amp; !/(compatible|webkit)/.test( userAgent )
};

var styleFloat = jQuery.browser.msie ?
	"styleFloat" :
	"cssFloat";
	
jQuery.extend({

	boxModel: !jQuery.browser.msie || document.compatMode == "CSS1Compat",
	
	props: {
		"for": "htmlFor",
		"class": "className",
		"float": styleFloat,
		cssFloat: styleFloat,
		styleFloat: styleFloat,
		innerHTML: "innerHTML",
		className: "className",
		value: "value",
		disabled: "disabled",
		checked: "checked",
		readonly: "readOnly",
		selected: "selected",
		maxlength: "maxLength",
		selectedIndex: "selectedIndex",
		defaultValue: "defaultValue",
		tagName: "tagName",
		nodeName: "nodeName"
	}
});

jQuery.each({
	parent: function(elem){return elem.parentNode;},
	parents: function(elem){return jQuery.dir(elem,"parentNode");},
	next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
	prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
	nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
	prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
	siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
	children: function(elem){return jQuery.sibling(elem.firstChild);},
	contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
}, function(name, fn){
	jQuery.fn[ name ] = function( selector ) {
		var ret = jQuery.map( this, fn );

		if ( selector &amp;&amp; typeof selector == "string" )
			ret = jQuery.multiFilter( selector, ret );

		return this.pushStack( jQuery.unique( ret ) );
	};
});

jQuery.each({
	appendTo: "append",
	prependTo: "prepend",
	insertBefore: "before",
	insertAfter: "after",
	replaceAll: "replaceWith"
}, function(name, original){
	jQuery.fn[ name ] = function() {
		var args = arguments;

		return this.each(function(){
			for ( var i = 0, length = args.length; i &lt; length; i++ )
				jQuery( args[ i ] )[ original ]( this );
		});
	};
});

jQuery.each({
	removeAttr: function( name ) {
		jQuery.attr( this, name, "" );
		if (this.nodeType == 1) 
			this.removeAttribute( name );
	},

	addClass: function( classNames ) {
		jQuery.className.add( this, classNames );
	},

	removeClass: function( classNames ) {
		jQuery.className.remove( this, classNames );
	},

	toggleClass: function( classNames ) {
		jQuery.className[ jQuery.className.has( this, classNames ) ? "remove" : "add" ]( this, classNames );
	},

	remove: function( selector ) {
		if ( !selector || jQuery.filter( selector, [ this ] ).r.length ) {
		
			jQuery( "*", this ).add(this).each(function(){
				jQuery.event.remove(this);
				jQuery.removeData(this);
			});
			if (this.parentNode)
				this.parentNode.removeChild( this );
		}
	},

	empty: function() {
	
		jQuery( "&gt;*", this ).remove();
	
		while ( this.firstChild )
			this.removeChild( this.firstChild );
	}
}, function(name, fn){
	jQuery.fn[ name ] = function(){
		return this.each( fn, arguments );
	};
});

jQuery.each([ "Height", "Width" ], function(i, name){
	var type = name.toLowerCase();
	
	jQuery.fn[ type ] = function( size ) {
	
		return this[0] == window ?
		
			jQuery.browser.opera &amp;&amp; document.body[ "client" + name ] || 
			
			
			jQuery.browser.safari &amp;&amp; window[ "inner" + name ] ||
			
			
			document.compatMode == "CSS1Compat" &amp;&amp; document.documentElement[ "client" + name ] || document.body[ "client" + name ] :
		
			
			this[0] == document ?
				
				Math.max( 
					Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]), 
					Math.max(document.body["offset" + name], document.documentElement["offset" + name]) 
				) :

				
				size == undefined ?
					
					(this.length ? jQuery.css( this[0], type ) : null) :

					
					this.css( type, size.constructor == String ? size : size + "px" );
	};
});

var chars = jQuery.browser.safari &amp;&amp; parseInt(jQuery.browser.version) &lt; 417 ?
		"(?:[\\w*_-]|\\\\.)" :
		"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",
	quickChild = new RegExp("^&gt;\\s*(" + chars + "+)"),
	quickID = new RegExp("^(" + chars + "+)(#)(" + chars + "+)"),
	quickClass = new RegExp("^([#.]?)(" + chars + "*)");

jQuery.extend({
	expr: {
		"": function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},
		"#": function(a,i,m){return a.getAttribute("id")==m[2];},
		":": {
			
			lt: function(a,i,m){return i&lt;m[3]-0;},
			gt: function(a,i,m){return i&gt;m[3]-0;},
			nth: function(a,i,m){return m[3]-0==i;},
			eq: function(a,i,m){return m[3]-0==i;},
			first: function(a,i){return i==0;},
			last: function(a,i,m,r){return i==r.length-1;},
			even: function(a,i){return i%2==0;},
			odd: function(a,i){return i%2;},

			
			"first-child": function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},
			"last-child": function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},
			"only-child": function(a){return !jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},

			
			parent: function(a){return a.firstChild;},
			empty: function(a){return !a.firstChild;},

			
			contains: function(a,i,m){return (a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])&gt;=0;},

			
			visible: function(a){return "hidden"!=a.type&amp;&amp;jQuery.css(a,"display")!="none"&amp;&amp;jQuery.css(a,"visibility")!="hidden";},
			hidden: function(a){return "hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},

			
			enabled: function(a){return !a.disabled;},
			disabled: function(a){return a.disabled;},
			checked: function(a){return a.checked;},
			selected: function(a){return a.selected||jQuery.attr(a,"selected");},

			
			text: function(a){return "text"==a.type;},
			radio: function(a){return "radio"==a.type;},
			checkbox: function(a){return "checkbox"==a.type;},
			file: function(a){return "file"==a.type;},
			password: function(a){return "password"==a.type;},
			submit: function(a){return "submit"==a.type;},
			image: function(a){return "image"==a.type;},
			reset: function(a){return "reset"==a.type;},
			button: function(a){return "button"==a.type||jQuery.nodeName(a,"button");},
			input: function(a){return /input|select|textarea|button/i.test(a.nodeName);},

			
			has: function(a,i,m){return jQuery.find(m[3],a).length;},

			
			header: function(a){return /h\d/i.test(a.nodeName);},

			
			animated: function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}
		}
	},
	
	
	parse: [
		
		/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,

		
		/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,

		
		new RegExp("^([:.#]*)(" + chars + "+)")
	],

	multiFilter: function( expr, elems, not ) {
		var old, cur = [];

		while ( expr &amp;&amp; expr != old ) {
			old = expr;
			var f = jQuery.filter( expr, elems, not );
			expr = f.t.replace(/^\s*,\s*/, "" );
			cur = not ? elems = f.r : jQuery.merge( cur, f.r );
		}

		return cur;
	},

	find: function( t, context ) {
		
		if ( typeof t != "string" )
			return [ t ];

		
		if ( context &amp;&amp; context.nodeType != 1 &amp;&amp; context.nodeType != 9)
			return [ ];

		
		context = context || document;

	
		var ret = [context], done = [], last, nodeName;

		
		while ( t &amp;&amp; last != t ) {
			var r = [];
			last = t;

			t = jQuery.trim(t);

			var foundToken = false;

		
			var re = quickChild;
			var m = re.exec(t);

			if ( m ) {
				nodeName = m[1].toUpperCase();

				
				for ( var i = 0; ret[i]; i++ )
					for ( var c = ret[i].firstChild; c; c = c.nextSibling )
						if ( c.nodeType == 1 &amp;&amp; (nodeName == "*" || c.nodeName.toUpperCase() == nodeName) )
							r.push( c );

				ret = r;
				t = t.replace( re, "" );
				if ( t.indexOf(" ") == 0 ) continue;
				foundToken = true;
			} else {
				re = /^([&gt;+~])\s*(\w*)/i;

				if ( (m = re.exec(t)) != null ) {
					r = [];

					var merge = {};
					nodeName = m[2].toUpperCase();
					m = m[1];

					for ( var j = 0, rl = ret.length; j &lt; rl; j++ ) {
						var n = m == "~" || m == "+" ? ret[j].nextSibling : ret[j].firstChild;
						for ( ; n; n = n.nextSibling )
							if ( n.nodeType == 1 ) {
								var id = jQuery.data(n);

								if ( m == "~" &amp;&amp; merge[id] ) break;
								
								if (!nodeName || n.nodeName.toUpperCase() == nodeName ) {
									if ( m == "~" ) merge[id] = true;
									r.push( n );
								}
								
								if ( m == "+" ) break;
							}
					}

					ret = r;

					
					t = jQuery.trim( t.replace( re, "" ) );
					foundToken = true;
				}
			}

		
			if ( t &amp;&amp; !foundToken ) {
				
				if ( !t.indexOf(",") ) {
					
					if ( context == ret[0] ) ret.shift();

					
					done = jQuery.merge( done, ret );

				
					r = ret = [context];

					
					t = " " + t.substr(1,t.length);

				} else {
				
					var re2 = quickID;
					var m = re2.exec(t);
					
					
					if ( m ) {
						m = [ 0, m[2], m[3], m[1] ];

					} else {
						
						re2 = quickClass;
						m = re2.exec(t);
					}

					m[2] = m[2].replace(/\\/g, "");

					var elem = ret[ret.length-1];

					
					if ( m[1] == "#" &amp;&amp; elem &amp;&amp; elem.getElementById &amp;&amp; !jQuery.isXMLDoc(elem) ) {
					
						var oid = elem.getElementById(m[2]);
						
						if ( (jQuery.browser.msie||jQuery.browser.opera) &amp;&amp; oid &amp;&amp; typeof oid.id == "string" &amp;&amp; oid.id != m[2] )
							oid = jQuery('[@id="'+m[2]+'"]', elem)[0];

						
						ret = r = oid &amp;&amp; (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] : [];
					} else {
						
						for ( var i = 0; ret[i]; i++ ) {
							
							var tag = m[1] == "#" &amp;&amp; m[3] ? m[3] : m[1] != "" || m[0] == "" ? "*" : m[2];

							
							if ( tag == "*" &amp;&amp; ret[i].nodeName.toLowerCase() == "object" )
								tag = "param";

							r = jQuery.merge( r, ret[i].getElementsByTagName( tag ));
						}

						
						if ( m[1] == "." )
							r = jQuery.classFilter( r, m[2] );

						
						if ( m[1] == "#" ) {
							var tmp = [];

							
							for ( var i = 0; r[i]; i++ )
								if ( r[i].getAttribute("id") == m[2] ) {
									tmp = [ r[i] ];
									break;
								}

							r = tmp;
						}

						ret = r;
					}

					t = t.replace( re2, "" );
				}

			}

			
			if ( t ) {
				
				var val = jQuery.filter(t,r);
				ret = r = val.r;
				t = jQuery.trim(val.t);
			}
		}

		
		if ( t )
			ret = [];

		if ( ret &amp;&amp; context == ret[0] )
			ret.shift();

		
		done = jQuery.merge( done, ret );

		return done;
	},

	classFilter: function(r,m,not){
		m = " " + m + " ";
		var tmp = [];
		for ( var i = 0; r[i]; i++ ) {
			var pass = (" " + r[i].className + " ").indexOf( m ) &gt;= 0;
			if ( !not &amp;&amp; pass || not &amp;&amp; !pass )
				tmp.push( r[i] );
		}
		return tmp;
	},

	filter: function(t,r,not) {
		var last;

	
		while ( t &amp;&amp; t != last ) {
			last = t;

			var p = jQuery.parse, m;

			for ( var i = 0; p[i]; i++ ) {
				m = p[i].exec( t );

				if ( m ) {
					
					t = t.substring( m[0].length );

					m[2] = m[2].replace(/\\/g, "");
					break;
				}
			}

			if ( !m )
				break;

		
			if ( m[1] == ":" &amp;&amp; m[2] == "not" )
				
				r = isSimple.test( m[3] ) ?
					jQuery.filter(m[3], r, true).r :
					jQuery( r ).not( m[3] );

			
			else if ( m[1] == "." )
				r = jQuery.classFilter(r, m[2], not);

			else if ( m[1] == "[" ) {
				var tmp = [], type = m[3];
				
				for ( var i = 0, rl = r.length; i &lt; rl; i++ ) {
					var a = r[i], z = a[ jQuery.props[m[2]] || m[2] ];
					
					if ( z == null || /href|src|selected/.test(m[2]) )
						z = jQuery.attr(a,m[2]) || '';

					if ( (type == "" &amp;&amp; !!z ||
						 type == "=" &amp;&amp; z == m[5] ||
						 type == "!=" &amp;&amp; z != m[5] ||
						 type == "^=" &amp;&amp; z &amp;&amp; !z.indexOf(m[5]) ||
						 type == "$=" &amp;&amp; z.substr(z.length - m[5].length) == m[5] ||
						 (type == "*=" || type == "~=") &amp;&amp; z.indexOf(m[5]) &gt;= 0) ^ not )
							tmp.push( a );
				}
				
				r = tmp;

			
			} else if ( m[1] == ":" &amp;&amp; m[2] == "nth-child" ) {
				var merge = {}, tmp = [],
					
					test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
						m[3] == "even" &amp;&amp; "2n" || m[3] == "odd" &amp;&amp; "2n+1" ||
						!/\D/.test(m[3]) &amp;&amp; "0n+" + m[3] || m[3]),
					
					first = (test[1] + (test[2] || 1)) - 0, last = test[3] - 0;
 
				
				for ( var i = 0, rl = r.length; i &lt; rl; i++ ) {
					var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode);

					if ( !merge[id] ) {
						var c = 1;

						for ( var n = parentNode.firstChild; n; n = n.nextSibling )
							if ( n.nodeType == 1 )
								n.nodeIndex = c++;

						merge[id] = true;
					}

					var add = false;

					if ( first == 0 ) {
						if ( node.nodeIndex == last )
							add = true;
					} else if ( (node.nodeIndex - last) % first == 0 &amp;&amp; (node.nodeIndex - last) / first &gt;= 0 )
						add = true;

					if ( add ^ not )
						tmp.push( node );
				}

				r = tmp;

			
			} else {
				var fn = jQuery.expr[ m[1] ];
				if ( typeof fn == "object" )
					fn = fn[ m[2] ];

				if ( typeof fn == "string" )
					fn = eval("false||function(a,i){return " + fn + ";}");

				
				r = jQuery.grep( r, function(elem, i){
					return fn(elem, i, m, r);
				}, not );
			}
		}

		return { r: r, t: t };
	},

	dir: function( elem, dir ){
		var matched = [];
		var cur = elem[dir];
		while ( cur &amp;&amp; cur != document ) {
			if ( cur.nodeType == 1 )
				matched.push( cur );
			cur = cur[dir];
		}
		return matched;
	},
	
	nth: function(cur,result,dir,elem){
		result = result || 1;
		var num = 0;

		for ( ; cur; cur = cur[dir] )
			if ( cur.nodeType == 1 &amp;&amp; ++num == result )
				break;

		return cur;
	},
	
	sibling: function( n, elem ) {
		var r = [];

		for ( ; n; n = n.nextSibling ) {
			if ( n.nodeType == 1 &amp;&amp; (!elem || n != elem) )
				r.push( n );
		}

		return r;
	}
});

jQuery.event = {


	add: function(elem, types, handler, data) {
		if ( elem.nodeType == 3 || elem.nodeType == 8 )
			return;

		if ( jQuery.browser.msie &amp;&amp; elem.setInterval != undefined )
			elem = window;

		if ( !handler.guid )
			handler.guid = this.guid++;
	
		if( data != undefined ) { 
		
			var fn = handler; 

			
			handler = function() { 
				
				return fn.apply(this, arguments); 
			};

			
			handler.data = data;

		
			handler.guid = fn.guid;
		}

	
		var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
			handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
				
				var val;

				
				if ( typeof jQuery == "undefined" || jQuery.event.triggered )
					return val;
		
				val = jQuery.event.handle.apply(arguments.callee.elem, arguments);
		
				return val;
			});

		handle.elem = elem;
			
	
			jQuery.each(types.split(/\s+/), function(index, type) {
			
				var parts = type.split(".");
				type = parts[0];
				handler.type = parts[1];

				
				var handlers = events[type];

				if (!handlers) {
					handlers = events[type] = {};
		
		
					if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem) === false ) {
					
						if (elem.addEventListener)
							elem.addEventListener(type, handle, false);
						else if (elem.attachEvent)
							elem.attachEvent("on" + type, handle);
					}
				}

		
				handlers[handler.guid] = handler;

			
				jQuery.event.global[type] = true;
			});
		
		
		elem = null;
	},

	guid: 1,
	global: {},

	
	remove: function(elem, types, handler) {
	
		if ( elem.nodeType == 3 || elem.nodeType == 8 )
			return;

		var events = jQuery.data(elem, "events"), ret, index;

		if ( events ) {
			
			if ( types == undefined || (typeof types == "string" &amp;&amp; types.charAt(0) == ".") )
				for ( var type in events )
					this.remove( elem, type + (types || "") );
			else {
			
				if ( types.type ) {
					handler = types.handler;
					types = types.type;
				}
				
			
				jQuery.each(types.split(/\s+/), function(index, type){
				
					var parts = type.split(".");
					type = parts[0];
					
					if ( events[type] ) {
						
						if ( handler )
							delete events[type][handler.guid];
			
						else
							for ( handler in events[type] )
						
								if ( !parts[1] || events[type][handler].type == parts[1] )
									delete events[type][handler];

					
						for ( ret in events[type] ) break;
						if ( !ret ) {
							if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem) === false ) {
								if (elem.removeEventListener)
									elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
								else if (elem.detachEvent)
									elem.detachEvent("on" + type, jQuery.data(elem, "handle"));
							}
							ret = null;
							delete events[type];
						}
					}
				});
			}

		
			for ( ret in events ) break;
			if ( !ret ) {
				var handle = jQuery.data( elem, "handle" );
				if ( handle ) handle.elem = null;
				jQuery.removeData( elem, "events" );
				jQuery.removeData( elem, "handle" );
			}
		}
	},

	trigger: function(type, data, elem, donative, extra) {
	
		data = jQuery.makeArray(data || []);

		if ( type.indexOf("!") &gt;= 0 ) {
			type = type.slice(0, -1);
			var exclusive = true;
		}

		
		if ( !elem ) {
			
			if ( this.global[type] )
				jQuery("*").add([window, document]).trigger(type, data);

		} else {
			
			if ( elem.nodeType == 3 || elem.nodeType == 8 )
				return undefined;

			var val, ret, fn = jQuery.isFunction( elem[ type ] || null ),
			
				event = !data[0] || !data[0].preventDefault;
			
			if ( event )
				data.unshift( this.fix({ type: type, target: elem }) );

			
			data[0].type = type;
			if ( exclusive )
				data[0].exclusive = true;

		
			if ( jQuery.isFunction( jQuery.data(elem, "handle") ) )
				val = jQuery.data(elem, "handle").apply( elem, data );

			
			if ( !fn &amp;&amp; elem["on"+type] &amp;&amp; elem["on"+type].apply( elem, data ) === false )
				val = false;

			if ( event )
				data.shift();

			if ( extra &amp;&amp; jQuery.isFunction( extra ) ) {
		
				ret = extra.apply( elem, val == null ? data : data.concat( val ) );
			
				if (ret !== undefined)
					val = ret;
			}

			if ( fn &amp;&amp; donative !== false &amp;&amp; val !== false &amp;&amp; !(jQuery.nodeName(elem, 'a') &amp;&amp; type == "click") ) {
				this.triggered = true;
				try {
					elem[ type ]();
			
				} catch (e) {}
			}

			this.triggered = false;
		}

		return val;
	},

	handle: function(event) {
		
		var val;

	
		event = jQuery.event.fix( event || window.event || {} ); 

	
		var parts = event.type.split(".");
		event.type = parts[0];

		var handlers = jQuery.data(this, "events") &amp;&amp; jQuery.data(this, "events")[event.type], args = Array.prototype.slice.call( arguments, 1 );
		args.unshift( event );

		for ( var j in handlers ) {
			var handler = handlers[j];
	
			args[0].handler = handler;
			args[0].data = handler.data;

		
			if ( !parts[1] &amp;&amp; !event.exclusive || handler.type == parts[1] ) {
				var ret = handler.apply( this, args );

				if ( val !== false )
					val = ret;

				if ( ret === false ) {
					event.preventDefault();
					event.stopPropagation();
				}
			}
		}

	
		if (jQuery.browser.msie)
			event.target = event.preventDefault = event.stopPropagation =
				event.handler = event.data = null;

		return val;
	},

	fix: function(event) {
	
		var originalEvent = event;
		event = jQuery.extend({}, originalEvent);
		
	
		event.preventDefault = function() {
			
			if (originalEvent.preventDefault)
				originalEvent.preventDefault();
			
			originalEvent.returnValue = false;
		};
		event.stopPropagation = function() {
		
			if (originalEvent.stopPropagation)
				originalEvent.stopPropagation();
			
			originalEvent.cancelBubble = true;
		};
		
		
		if ( !event.target )
			event.target = event.srcElement || document; 
				
		
		if ( event.target.nodeType == 3 )
			event.target = originalEvent.target.parentNode;

		
		if ( !event.relatedTarget &amp;&amp; event.fromElement )
			event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;

		
		if ( event.pageX == null &amp;&amp; event.clientX != null ) {
			var doc = document.documentElement, body = document.body;
			event.pageX = event.clientX + (doc &amp;&amp; doc.scrollLeft || body &amp;&amp; body.scrollLeft || 0) - (doc.clientLeft || 0);
			event.pageY = event.clientY + (doc &amp;&amp; doc.scrollTop || body &amp;&amp; body.scrollTop || 0) - (doc.clientTop || 0);
		}
			
	
		if ( !event.which &amp;&amp; ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
			event.which = event.charCode || event.keyCode;
		
		if ( !event.metaKey &amp;&amp; event.ctrlKey )
			event.metaKey = event.ctrlKey;

	
		if ( !event.which &amp;&amp; event.button )
			event.which = (event.button &amp; 1 ? 1 : ( event.button &amp; 2 ? 3 : ( event.button &amp; 4 ? 2 : 0 ) ));
			
		return event;
	},
	
	special: {
		ready: {
			setup: function() {
			
				bindReady();
				return;
			},
			
			teardown: function() { return; }
		},
		
		mouseenter: {
			setup: function() {
				if ( jQuery.browser.msie ) return false;
				jQuery(this).bind("mouseover", jQuery.event.special.mouseenter.handler);
				return true;
			},
		
			teardown: function() {
				if ( jQuery.browser.msie ) return false;
				jQuery(this).unbind("mouseover", jQuery.event.special.mouseenter.handler);
				return true;
			},
			
			handler: function(event) {
				
				if ( withinElement(event, this) ) return true;
				
				arguments[0].type = "mouseenter";
				return jQuery.event.handle.apply(this, arguments);
			}
		},
	
		mouseleave: {
			setup: function() {
				if ( jQuery.browser.msie ) return false;
				jQuery(this).bind("mouseout", jQuery.event.special.mouseleave.handler);
				return true;
			},
		
			teardown: function() {
				if ( jQuery.browser.msie ) return false;
				jQuery(this).unbind("mouseout", jQuery.event.special.mouseleave.handler);
				return true;
			},
			
			handler: function(event) {
				
				if ( withinElement(event, this) ) return true;
				
				arguments[0].type = "mouseleave";
				return jQuery.event.handle.apply(this, arguments);
			}
		}
	}
};

jQuery.fn.extend({
	bind: function( type, data, fn ) {
		return type == "unload" ? this.one(type, data, fn) : this.each(function(){
			jQuery.event.add( this, type, fn || data, fn &amp;&amp; data );
		});
	},
	
	one: function( type, data, fn ) {
		return this.each(function(){
			jQuery.event.add( this, type, function(event) {
				jQuery(this).unbind(event);
				return (fn || data).apply( this, arguments);
			}, fn &amp;&amp; data);
		});
	},

	unbind: function( type, fn ) {
		return this.each(function(){
			jQuery.event.remove( this, type, fn );
		});
	},

	trigger: function( type, data, fn ) {
		return this.each(function(){
			jQuery.event.trigger( type, data, this, true, fn );
		});
	},

	triggerHandler: function( type, data, fn ) {
		if ( this[0] )
			return jQuery.event.trigger( type, data, this[0], false, fn );
		return undefined;
	},

	toggle: function() {
	
		var args = arguments;

		return this.click(function(event) {
		
			this.lastToggle = 0 == this.lastToggle ? 1 : 0;
			
			
			event.preventDefault();
			
		
			return args[this.lastToggle].apply( this, arguments ) || false;
		});
	},

	hover: function(fnOver, fnOut) {
		return this.bind('mouseenter', fnOver).bind('mouseleave', fnOut);
	},
	
	ready: function(fn) {
	
		bindReady();

		if ( jQuery.isReady )
			
			fn.call( document, jQuery );
			
		
		else
			
			jQuery.readyList.push( function() { return fn.call(this, jQuery); } );
	
		return this;
	}
});

jQuery.extend({
	isReady: false,
	readyList: [],
	
	ready: function() {
		
		if ( !jQuery.isReady ) {
			
			jQuery.isReady = true;
			
			
			if ( jQuery.readyList ) {
				
				jQuery.each( jQuery.readyList, function(){
					this.apply( document );
				});
				
				
				jQuery.readyList = null;
			}
		
		
			jQuery(document).triggerHandler("ready");
		}
	}
});

var readyBound = false;

function bindReady(){
	if ( readyBound ) return;
	readyBound = true;

	
	if ( document.addEventListener &amp;&amp; !jQuery.browser.opera)
		
		document.addEventListener( "DOMContentLoaded", jQuery.ready, false );

	if ( jQuery.browser.msie &amp;&amp; window == top ) (function(){
		if (jQuery.isReady) return;
		try {
			
			document.documentElement.doScroll("left");
		} catch( error ) {
			setTimeout( arguments.callee, 0 );
			return;
		}
	
		jQuery.ready();
	})();

	if ( jQuery.browser.opera )
		document.addEventListener( "DOMContentLoaded", function () {
			if (jQuery.isReady) return;
			for (var i = 0; i &lt; document.styleSheets.length; i++)
				if (document.styleSheets[i].disabled) {
					setTimeout( arguments.callee, 0 );
					return;
				}
			
			jQuery.ready();
		}, false);

	if ( jQuery.browser.safari ) {
		var numStyles;
		(function(){
			if (jQuery.isReady) return;
			if ( document.readyState != "loaded" &amp;&amp; document.readyState != "complete" ) {
				setTimeout( arguments.callee, 0 );
				return;
			}
			if ( numStyles === undefined )
				numStyles = jQuery("style, link[rel=stylesheet]").length;
			if ( document.styleSheets.length != numStyles ) {
				setTimeout( arguments.callee, 0 );
				return;
			}
			
			jQuery.ready();
		})();
	}


	jQuery.event.add( window, "load", jQuery.ready );
}

jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
	"mousedown,mouseup,mousemove,mouseover,mouseout,change,select," + 
	"submit,keydown,keypress,keyup,error").split(","), function(i, name){
	
	jQuery.fn[name] = function(fn){
		return fn ? this.bind(name, fn) : this.trigger(name);
	};
});


var withinElement = function(event, elem) {
	
	var parent = event.relatedTarget;
	
	while ( parent &amp;&amp; parent != elem ) try { parent = parent.parentNode; } catch(error) { parent = elem; }
	
	return parent == elem;
};


jQuery(window).bind("unload", function() {
	jQuery("*").add(document).unbind();
});
jQuery.fn.extend({
	load: function( url, params, callback ) {
		if ( jQuery.isFunction( url ) )
			return this.bind("load", url);

		var off = url.indexOf(" ");
		if ( off &gt;= 0 ) {
			var selector = url.slice(off, url.length);
			url = url.slice(0, off);
		}

		callback = callback || function(){};

	
		var type = "GET";

	
		if ( params )
			
			if ( jQuery.isFunction( params ) ) {
				
				callback = params;
				params = null;

			
			} else {
				params = jQuery.param( params );
				type = "POST";
			}

		var self = this;

		
		jQuery.ajax({
			url: url,
			type: type,
			dataType: "html",
			data: params,
			complete: function(res, status){
				
				if ( status == "success" || status == "notmodified" )
					
					self.html( selector ?
						
						jQuery("&lt;div/&gt;")
							
							.append(res.responseText.replace(/&lt;script(.|\s)*?\/script&gt;/g, ""))

							
							.find(selector) :

					
						res.responseText );

				self.each( callback, [res.responseText, status, res] );
			}
		});
		return this;
	},

	serialize: function() {
		return jQuery.param(this.serializeArray());
	},
	serializeArray: function() {
		return this.map(function(){
			return jQuery.nodeName(this, "form") ?
				jQuery.makeArray(this.elements) : this;
		})
		.filter(function(){
			return this.name &amp;&amp; !this.disabled &amp;&amp; 
				(this.checked || /select|textarea/i.test(this.nodeName) || 
					/text|hidden|password/i.test(this.type));
		})
		.map(function(i, elem){
			var val = jQuery(this).val();
			return val == null ? null :
				val.constructor == Array ?
					jQuery.map( val, function(val, i){
						return {name: elem.name, value: val};
					}) :
					{name: elem.name, value: val};
		}).get();
	}
});


jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
	jQuery.fn[o] = function(f){
		return this.bind(o, f);
	};
});

var jsc = (new Date).getTime();

jQuery.extend({
	get: function( url, data, callback, type ) {
		
		if ( jQuery.isFunction( data ) ) {
			callback = data;
			data = null;
		}
		
		return jQuery.ajax({
			type: "GET",
			url: url,
			data: data,
			success: callback,
			dataType: type
		});
	},

	getScript: function( url, callback ) {
		return jQuery.get(url, null, callback, "script");
	},

	getJSON: function( url, data, callback ) {
		return jQuery.get(url, data, callback, "json");
	},

	post: function( url, data, callback, type ) {
		if ( jQuery.isFunction( data ) ) {
			callback = data;
			data = {};
		}

		return jQuery.ajax({
			type: "POST",
			url: url,
			data: data,
			success: callback,
			dataType: type
		});
	},

	ajaxSetup: function( settings ) {
		jQuery.extend( jQuery.ajaxSettings, settings );
	},

	ajaxSettings: {
		global: true,
		type: "GET",
		timeout: 0,
		contentType: "application/x-www-form-urlencoded",
		processData: true,
		async: true,
		data: null,
		username: null,
		password: null,
		accepts: {
			xml: "application/xml, text/xml",
			html: "text/html",
			script: "text/javascript, application/javascript",
			json: "application/json, text/javascript",
			text: "text/plain",
			_default: "*/*"
		}
	},
	
	
	lastModified: {},

	ajax: function( s ) {
		var jsonp, jsre = /=\?(&amp;|$)/g, status, data;

	
		s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));

		
		if ( s.data &amp;&amp; s.processData &amp;&amp; typeof s.data != "string" )
			s.data = jQuery.param(s.data);

		
		if ( s.dataType == "jsonp" ) {
			if ( s.type.toLowerCase() == "get" ) {
				if ( !s.url.match(jsre) )
					s.url += (s.url.match(/\?/) ? "&amp;" : "?") + (s.jsonp || "callback") + "=?";
			} else if ( !s.data || !s.data.match(jsre) )
				s.data = (s.data ? s.data + "&amp;" : "") + (s.jsonp || "callback") + "=?";
			s.dataType = "json";
		}

		
		if ( s.dataType == "json" &amp;&amp; (s.data &amp;&amp; s.data.match(jsre) || s.url.match(jsre)) ) {
			jsonp = "jsonp" + jsc++;

			
			if ( s.data )
				s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
			s.url = s.url.replace(jsre, "=" + jsonp + "$1");

	
			s.dataType = "script";

		
			window[ jsonp ] = function(tmp){
				data = tmp;
				success();
				complete();
			
				window[ jsonp ] = undefined;
				try{ delete window[ jsonp ]; } catch(e){}
				if ( head )
					head.removeChild( script );
			};
		}

		if ( s.dataType == "script" &amp;&amp; s.cache == null )
			s.cache = false;

		if ( s.cache === false &amp;&amp; s.type.toLowerCase() == "get" ) {
			var ts = (new Date()).getTime();
			
			var ret = s.url.replace(/(\?|&amp;)_=.*?(&amp;|$)/, "$1_=" + ts + "$2");
		
			s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&amp;" : "?") + "_=" + ts : "");
		}

		
		if ( s.data &amp;&amp; s.type.toLowerCase() == "get" ) {
			s.url += (s.url.match(/\?/) ? "&amp;" : "?") + s.data;

		
			s.data = null;
		}

	
		if ( s.global &amp;&amp; ! jQuery.active++ )
			jQuery.event.trigger( "ajaxStart" );


		if ( (!s.url.indexOf("http") || !s.url.indexOf("//")) &amp;&amp; s.dataType == "script" &amp;&amp; s.type.toLowerCase() == "get" ) {
			var head = document.getElementsByTagName("head")[0];
			var script = document.createElement("script");
			script.src = s.url;
			if (s.scriptCharset)
				script.charset = s.scriptCharset;

			if ( !jsonp ) {
				var done = false;

			
				script.onload = script.onreadystatechange = function(){
					if ( !done &amp;&amp; (!this.readyState || 
							this.readyState == "loaded" || this.readyState == "complete") ) {
						done = true;
						success();
						complete();
						head.removeChild( script );
					}
				};
			}

			head.appendChild(script);

		
			return undefined;
		}

		var requestDone = false;

		var xml = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();

	
		xml.open(s.type, s.url, s.async, s.username, s.password);


		try {
		
			if ( s.data )
				xml.setRequestHeader("Content-Type", s.contentType);

		
			if ( s.ifModified )
				xml.setRequestHeader("If-Modified-Since",
					jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );

	
			xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");

			
			xml.setRequestHeader("Accept", s.dataType &amp;&amp; s.accepts[ s.dataType ] ?
				s.accepts[ s.dataType ] + ", */*" :
				s.accepts._default );
		} catch(e){}

		
		if ( s.beforeSend )
			s.beforeSend(xml);
			
		if ( s.global )
			jQuery.event.trigger("ajaxSend", [xml, s]);

		
		var onreadystatechange = function(isTimeout){
			
			if ( !requestDone &amp;&amp; xml &amp;&amp; (xml.readyState == 4 || isTimeout == "timeout") ) {
				requestDone = true;
				
				
				if (ival) {
					clearInterval(ival);
					ival = null;
				}
				
				status = isTimeout == "timeout" &amp;&amp; "timeout" ||
					!jQuery.httpSuccess( xml ) &amp;&amp; "error" ||
					s.ifModified &amp;&amp; jQuery.httpNotModified( xml, s.url ) &amp;&amp; "notmodified" ||
					"success";

				if ( status == "success" ) {
					
					try {
					
						data = jQuery.httpData( xml, s.dataType );
					} catch(e) {
						status = "parsererror";
					}
				}

			
				if ( status == "success" ) {
					
					var modRes;
					try {
						modRes = xml.getResponseHeader("Last-Modified");
					} catch(e) {} 
	
					if ( s.ifModified &amp;&amp; modRes )
						jQuery.lastModified[s.url] = modRes;

					if ( !jsonp )
						success();	
				} else
					jQuery.handleError(s, xml, status);

				complete();

			
				if ( s.async )
					xml = null;
			}
		};
		
		if ( s.async ) {
			
			var ival = setInterval(onreadystatechange, 13); 

			if ( s.timeout &gt; 0 )
				setTimeout(function(){
					
					if ( xml ) {
						
						xml.abort();
	
						if( !requestDone )
							onreadystatechange( "timeout" );
					}
				}, s.timeout);
		}
			
		
		try {
			xml.send(s.data);
		} catch(e) {
			jQuery.handleError(s, xml, null, e);
		}
		
		if ( !s.async )
			onreadystatechange();

		function success(){
		
			if ( s.success )
				s.success( data, status );

			
			if ( s.global )
				jQuery.event.trigger( "ajaxSuccess", [xml, s] );
		}

		function complete(){
			
			if ( s.complete )
				s.complete(xml, status);

			if ( s.global )
				jQuery.event.trigger( "ajaxComplete", [xml, s] );

			
			if ( s.global &amp;&amp; ! --jQuery.active )
				jQuery.event.trigger( "ajaxStop" );
		}
		
		
		return xml;
	},

	handleError: function( s, xml, status, e ) {
		
		if ( s.error ) s.error( xml, status, e );

		
		if ( s.global )
			jQuery.event.trigger( "ajaxError", [xml, s, e] );
	},

	
	active: 0,


	httpSuccess: function( r ) {
		try {
			
			return !r.status &amp;&amp; location.protocol == "file:" ||
				( r.status &gt;= 200 &amp;&amp; r.status &lt; 300 ) || r.status == 304 || r.status == 1223 ||
				jQuery.browser.safari &amp;&amp; r.status == undefined;
		} catch(e){}
		return false;
	},

	
	httpNotModified: function( xml, url ) {
		try {
			var xmlRes = xml.getResponseHeader("Last-Modified");

			
			return xml.status == 304 || xmlRes == jQuery.lastModified[url] ||
				jQuery.browser.safari &amp;&amp; xml.status == undefined;
		} catch(e){}
		return false;
	},

	httpData: function( r, type ) {
		var ct = r.getResponseHeader("content-type");
		var xml = type == "xml" || !type &amp;&amp; ct &amp;&amp; ct.indexOf("xml") &gt;= 0;
		var data = xml ? r.responseXML : r.responseText;

		if ( xml &amp;&amp; data.documentElement.tagName == "parsererror" )
			throw "parsererror";

		if ( type == "script" )
			jQuery.globalEval( data );

		if ( type == "json" )
			data = eval("(" + data + ")");

		return data;
	},


	param: function( a ) {
		var s = [];

	
		if ( a.constructor == Array || a.jquery )
			
			jQuery.each( a, function(){
				s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) );
			});

	
		else
			
			for ( var j in a )
				
				if ( a[j] &amp;&amp; a[j].constructor == Array )
					jQuery.each( a[j], function(){
						s.push( encodeURIComponent(j) + "=" + encodeURIComponent( this ) );
					});
				else
					s.push( encodeURIComponent(j) + "=" + encodeURIComponent( a[j] ) );

		
		return s.join("&amp;").replace(/%20/g, "+");
	}

});
jQuery.fn.extend({
	show: function(speed,callback){
		return speed ?
			this.animate({
				height: "show", width: "show", opacity: "show"
			}, speed, callback) :
			
			this.filter(":hidden").each(function(){
				this.style.display = this.oldblock || "";
				if ( jQuery.css(this,"display") == "none" ) {
					var elem = jQuery("&lt;" + this.tagName + " /&gt;").appendTo("body");
					this.style.display = elem.css("display");
					
					if (this.style.display == "none")
						this.style.display = "block";
					elem.remove();
				}
			}).end();
	},
	
	hide: function(speed,callback){
		return speed ?
			this.animate({
				height: "hide", width: "hide", opacity: "hide"
			}, speed, callback) :
			
			this.filter(":visible").each(function(){
				this.oldblock = this.oldblock || jQuery.css(this,"display");
				this.style.display = "none";
			}).end();
	},


	_toggle: jQuery.fn.toggle,
	
	toggle: function( fn, fn2 ){
		return jQuery.isFunction(fn) &amp;&amp; jQuery.isFunction(fn2) ?
			this._toggle( fn, fn2 ) :
			fn ?
				this.animate({
					height: "toggle", width: "toggle", opacity: "toggle"
				}, fn, fn2) :
				this.each(function(){
					jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
				});
	},
	
	slideDown: function(speed,callback){
		return this.animate({height: "show"}, speed, callback);
	},
	
	slideUp: function(speed,callback){
		return this.animate({height: "hide"}, speed, callback);
	},

	slideToggle: function(speed, callback){
		return this.animate({height: "toggle"}, speed, callback);
	},
	
	fadeIn: function(speed, callback){
		return this.animate({opacity: "show"}, speed, callback);
	},
	
	fadeOut: function(speed, callback){
		return this.animate({opacity: "hide"}, speed, callback);
	},
	
	fadeTo: function(speed,to,callback){
		return this.animate({opacity: to}, speed, callback);
	},
	
	animate: function( prop, speed, easing, callback ) {
		var optall = jQuery.speed(speed, easing, callback);

		return this[ optall.queue === false ? "each" : "queue" ](function(){
			if ( this.nodeType != 1)
				return false;

			var opt = jQuery.extend({}, optall);
			var hidden = jQuery(this).is(":hidden"), self = this;
			
			for ( var p in prop ) {
				if ( prop[p] == "hide" &amp;&amp; hidden || prop[p] == "show" &amp;&amp; !hidden )
					return jQuery.isFunction(opt.complete) &amp;&amp; opt.complete.apply(this);

				if ( p == "height" || p == "width" ) {
					
					opt.display = jQuery.css(this, "display");

					
					opt.overflow = this.style.overflow;
				}
			}

			if ( opt.overflow != null )
				this.style.overflow = "hidden";

			opt.curAnim = jQuery.extend({}, prop);
			
			jQuery.each( prop, function(name, val){
				var e = new jQuery.fx( self, opt, name );

				if ( /toggle|show|hide/.test(val) )
					e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
				else {
					var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
						start = e.cur(true) || 0;

					if ( parts ) {
						var end = parseFloat(parts[2]),
							unit = parts[3] || "px";

						
						if ( unit != "px" ) {
							self.style[ name ] = (end || 1) + unit;
							start = ((end || 1) / e.cur(true)) * start;
							self.style[ name ] = start + unit;
						}

						
						if ( parts[1] )
							end = ((parts[1] == "-=" ? -1 : 1) * end) + start;

						e.custom( start, end, unit );
					} else
						e.custom( start, val, "" );
				}
			});

			
			return true;
		});
	},
	
	queue: function(type, fn){
		if ( jQuery.isFunction(type) || ( type &amp;&amp; type.constructor == Array )) {
			fn = type;
			type = "fx";
		}

		if ( !type || (typeof type == "string" &amp;&amp; !fn) )
			return queue( this[0], type );

		return this.each(function(){
			if ( fn.constructor == Array )
				queue(this, type, fn);
			else {
				queue(this, type).push( fn );
			
				if ( queue(this, type).length == 1 )
					fn.apply(this);
			}
		});
	},

	stop: function(clearQueue, gotoEnd){
		var timers = jQuery.timers;

		if (clearQueue)
			this.queue([]);

		this.each(function(){
			
			for ( var i = timers.length - 1; i &gt;= 0; i-- )
				if ( timers[i].elem == this ) {
					if (gotoEnd)
					
						timers[i](true);
					timers.splice(i, 1);
				}
		});

		
		if (!gotoEnd)
			this.dequeue();

		return this;
	}

});

var queue = function( elem, type, array ) {
	if ( !elem )
		return undefined;

	type = type || "fx";

	var q = jQuery.data( elem, type + "queue" );

	if ( !q || array )
		q = jQuery.data( elem, type + "queue", 
			array ? jQuery.makeArray(array) : [] );

	return q;
};

jQuery.fn.dequeue = function(type){
	type = type || "fx";

	return this.each(function(){
		var q = queue(this, type);

		q.shift();

		if ( q.length )
			q[0].apply( this );
	});
};

jQuery.extend({
	
	speed: function(speed, easing, fn) {
		var opt = speed &amp;&amp; speed.constructor == Object ? speed : {
			complete: fn || !fn &amp;&amp; easing || 
				jQuery.isFunction( speed ) &amp;&amp; speed,
			duration: speed,
			easing: fn &amp;&amp; easing || easing &amp;&amp; easing.constructor != Function &amp;&amp; easing
		};

		opt.duration = (opt.duration &amp;&amp; opt.duration.constructor == Number ? 
			opt.duration : 
			{ slow: 600, fast: 200 }[opt.duration]) || 400;
	
	
		opt.old = opt.complete;
		opt.complete = function(){
			if ( opt.queue !== false )
				jQuery(this).dequeue();
			if ( jQuery.isFunction( opt.old ) )
				opt.old.apply( this );
		};
	
		return opt;
	},
	
	easing: {
		linear: function( p, n, firstNum, diff ) {
			return firstNum + diff * p;
		},
		swing: function( p, n, firstNum, diff ) {
			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
		}
	},
	
	timers: [],
	timerId: null,

	fx: function( elem, options, prop ){
		this.options = options;
		this.elem = elem;
		this.prop = prop;

		if ( !options.orig )
			options.orig = {};
	}

});

jQuery.fx.prototype = {

	
	update: function(){
		if ( this.options.step )
			this.options.step.apply( this.elem, [ this.now, this ] );

		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );

		
		if ( this.prop == "height" || this.prop == "width" )
			this.elem.style.display = "block";
	},

	
	cur: function(force){
		if ( this.elem[this.prop] != null &amp;&amp; this.elem.style[this.prop] == null )
			return this.elem[ this.prop ];

		var r = parseFloat(jQuery.css(this.elem, this.prop, force));
		return r &amp;&amp; r &gt; -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
	},

	
	custom: function(from, to, unit){
		this.startTime = (new Date()).getTime();
		this.start = from;
		this.end = to;
		this.unit = unit || this.unit || "px";
		this.now = this.start;
		this.pos = this.state = 0;
		this.update();

		var self = this;
		function t(gotoEnd){
			return self.step(gotoEnd);
		}

		t.elem = this.elem;

		jQuery.timers.push(t);

		if ( jQuery.timerId == null ) {
			jQuery.timerId = setInterval(function(){
				var timers = jQuery.timers;
				
				for ( var i = 0; i &lt; timers.length; i++ )
					if ( !timers[i]() )
						timers.splice(i--, 1);

				if ( !timers.length ) {
					clearInterval( jQuery.timerId );
					jQuery.timerId = null;
				}
			}, 13);
		}
	},


	show: function(){
		
		this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
		this.options.show = true;

		
		this.custom(0, this.cur());

	
		if ( this.prop == "width" || this.prop == "height" )
			this.elem.style[this.prop] = "1px";
		
	
		jQuery(this.elem).show();
	},

	
	hide: function(){
	
		this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
		this.options.hide = true;

		
		this.custom(this.cur(), 0);
	},

	
	step: function(gotoEnd){
		var t = (new Date()).getTime();

		if ( gotoEnd || t &gt; this.options.duration + this.startTime ) {
			this.now = this.end;
			this.pos = this.state = 1;
			this.update();

			this.options.curAnim[ this.prop ] = true;

			var done = true;
			for ( var i in this.options.curAnim )
				if ( this.options.curAnim[i] !== true )
					done = false;

			if ( done ) {
				if ( this.options.display != null ) {
				
					this.elem.style.overflow = this.options.overflow;
				
					
					this.elem.style.display = this.options.display;
					if ( jQuery.css(this.elem, "display") == "none" )
						this.elem.style.display = "block";
				}

				
				if ( this.options.hide )
					this.elem.style.display = "none";

				
				if ( this.options.hide || this.options.show )
					for ( var p in this.options.curAnim )
						jQuery.attr(this.elem.style, p, this.options.orig[p]);
			}

			
			if ( done &amp;&amp; jQuery.isFunction( this.options.complete ) )
				
				this.options.complete.apply( this.elem );

			return false;
		} else {
			var n = t - this.startTime;
			this.state = n / this.options.duration;

			
			this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
			this.now = this.start + ((this.end - this.start) * this.pos);

			
			this.update();
		}

		return true;
	}

};

jQuery.fx.step = {
	scrollLeft: function(fx){
		fx.elem.scrollLeft = fx.now;
	},

	scrollTop: function(fx){
		fx.elem.scrollTop = fx.now;
	},

	opacity: function(fx){
		jQuery.attr(fx.elem.style, "opacity", fx.now);
	},

	_default: function(fx){
		fx.elem.style[ fx.prop ] = fx.now + fx.unit;
	}
};

jQuery.fn.offset = function() {
	var left = 0, top = 0, elem = this[0], results;
	
	if ( elem ) with ( jQuery.browser ) {
		var parent       = elem.parentNode, 
		    offsetChild  = elem,
		    offsetParent = elem.offsetParent, 
		    doc          = elem.ownerDocument,
		    safari2      = safari &amp;&amp; parseInt(version) &lt; 522 &amp;&amp; !/adobeair/i.test(userAgent),
		    fixed        = jQuery.css(elem, "position") == "fixed";
	

		if ( elem.getBoundingClientRect ) {
			var box = elem.getBoundingClientRect();
		

			add(box.left + Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
				box.top  + Math.max(doc.documentElement.scrollTop,  doc.body.scrollTop));
		

			add( -doc.documentElement.clientLeft, -doc.documentElement.clientTop );
	

		} else {
		

			add( elem.offsetLeft, elem.offsetTop );
			

			while ( offsetParent ) {

				add( offsetParent.offsetLeft, offsetParent.offsetTop );
			

				if ( mozilla &amp;&amp; !/^t(able|d|h)$/i.test(offsetParent.tagName) || safari &amp;&amp; !safari2 )
					border( offsetParent );
					

				if ( !fixed &amp;&amp; jQuery.css(offsetParent, "position") == "fixed" )
					fixed = true;
			

				offsetChild  = /^body$/i.test(offsetParent.tagName) ? offsetChild : offsetParent;

				offsetParent = offsetParent.offsetParent;
			}
		

			while ( parent &amp;&amp; parent.tagName &amp;&amp; !/^body|html$/i.test(parent.tagName) ) {

				if ( !/^inline|table.*$/i.test(jQuery.css(parent, "display")) )

					add( -parent.scrollLeft, -parent.scrollTop );
			

				if ( mozilla &amp;&amp; jQuery.css(parent, "overflow") != "visible" )
					border( parent );
			

				parent = parent.parentNode;
			}
		

			if ( (safari2 &amp;&amp; (fixed || jQuery.css(offsetChild, "position") == "absolute")) || 
				(mozilla &amp;&amp; jQuery.css(offsetChild, "position") != "absolute") )
					add( -doc.body.offsetLeft, -doc.body.offsetTop );
			

			if ( fixed )
				add(Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
					Math.max(doc.documentElement.scrollTop,  doc.body.scrollTop));
		}


		results = { top: top, left: left };
	}

	function border(elem) {
		add( jQuery.curCSS(elem, "borderLeftWidth", true), jQuery.curCSS(elem, "borderTopWidth", true) );
	}

	function add(l, t) {
		left += parseInt(l) || 0;
		top += parseInt(t) || 0;
	}

	return results;
};
})();
//]]&gt;
&lt;/script&gt;

&lt;script language="javascript" type="text/javascript"&gt;
//&lt;![CDATA[
(function($) {
    function Plot(target_, data_, options_) {
 
        var series = [],
            options = {

            colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],
                legend: {
                    show: true,
                    noColumns: 1, 
                    labelFormatter: null, 
                    labelBoxBorderColor: "#ccc", 
                    container: null, 
                    position: "ne", 
                    margin: 5, 
                    backgroundColor: null, 
                    backgroundOpacity: 0.85 
                },
                xaxis: {
                    mode: null,
                    min: null, 
                    max: null,
                    autoscaleMargin: null,
                    ticks: null, 
                    tickFormatter: null, 
                    labelWidth: null, 
                    labelHeight: null,
                    
                    
                    tickDecimals: null,
                    tickSize: null,
                    minTickSize: null, 
                    monthNames: null, 
                    timeformat: null 
                },
                yaxis: {
                    autoscaleMargin: 0.02
                },
                x2axis: {
                    autoscaleMargin: null
                },
                y2axis: {
                    autoscaleMargin: 0.02
                },              
                points: {
                    show: false,
                    radius: 3,
                    lineWidth: 2,
                    fill: true,
                    fillColor: "#ffffff"
                },
                lines: {
                    show: false,
                    lineWidth: 2,
                    fill: false,
                    fillColor: null
                },
                bars: {
                    show: false,
                    lineWidth: 2, 
                    barWidth: 1, 
                    fill: true,
                    fillColor: null,
                    align: "left" 
                },
                grid: {
                    color: "#545454",
                    backgroundColor: null, 
                    tickColor: "#dddddd", 
                    labelMargin: 5,
                    borderWidth: 2,
                    markings: null, 
                    markingsColor: "#f4f4f4",
                    markingsLineWidth: 2,
                    
                    clickable: false,
                    hoverable: false,
                    autoHighlight: true, 
                    mouseActiveRadius: 10
                },
                selection: {
                    mode: null, 
                    color: "#e8cfac"
                },
                shadowSize: 4
            },
        canvas = null,      
        overlay = null,     
        eventHolder = null,
        ctx = null, octx = null,
        target = target_,
        axes = { xaxis: {}, yaxis: {}, x2axis: {}, y2axis: {} },
        plotOffset = { left: 0, right: 0, top: 0, bottom: 0},
        canvasWidth = 0, canvasHeight = 0,
        plotWidth = 0, plotHeight = 0,
        
        workarounds = {};
        
        this.setData = setData;
        this.setupGrid = setupGrid;
        this.draw = draw;
        this.clearSelection = clearSelection;
        this.setSelection = setSelection;
        this.getCanvas = function() { return canvas; };
        this.getPlotOffset = function() { return plotOffset; };
        this.getData = function() { return series; };
        this.getAxes = function() { return axes; };
        this.highlight = highlight;
        this.unhighlight = unhighlight;
        
        
        parseOptions(options_);
        setData(data_);
        constructCanvas();
        setupGrid();
        draw();


        function setData(d) {
            series = parseData(d);

            fillInSeriesOptions();
            processData();
        }
        
        function parseData(d) {
            var res = [];
            for (var i = 0; i &lt; d.length; ++i) {
                var s;
                if (d[i].data) {
                    s = {};
                    for (var v in d[i])
                        s[v] = d[i][v];
                }
                else {
                    s = { data: d[i] };
                }
                res.push(s);
            }

            return res;
        }
        
        function parseOptions(o) {
            $.extend(true, options, o);

            if (options.xaxis.noTicks &amp;&amp; options.xaxis.ticks == null)
                options.xaxis.ticks = options.xaxis.noTicks;
            if (options.yaxis.noTicks &amp;&amp; options.yaxis.ticks == null)
                options.yaxis.ticks = options.yaxis.noTicks;
            if (options.grid.coloredAreas)
                options.grid.markings = options.grid.coloredAreas;
            if (options.grid.coloredAreasColor)
                options.grid.markingsColor = options.grid.coloredAreasColor;
        }

        function fillInSeriesOptions() {
            var i;
            
           
            var neededColors = series.length,
                usedColors = [],
                assignedColors = [];
            for (i = 0; i &lt; series.length; ++i) {
                var sc = series[i].color;
                if (sc != null) {
                    --neededColors;
                    if (typeof sc == "number")
                        assignedColors.push(sc);
                    else
                        usedColors.push(parseColor(series[i].color));
                }
            }
            
          
            for (i = 0; i &lt; assignedColors.length; ++i) {
                neededColors = Math.max(neededColors, assignedColors[i] + 1);
            }

            
            var colors = [], variation = 0;
            i = 0;
            while (colors.length &lt; neededColors) {
                var c;
                if (options.colors.length == i)
                    c = new Color(100, 100, 100);
                else
                    c = parseColor(options.colors[i]);

               
                var sign = variation % 2 == 1 ? -1 : 1;
                var factor = 1 + sign * Math.ceil(variation / 2) * 0.2;
                c.scale(factor, factor, factor);

              
                colors.push(c);
                
                ++i;
                if (i &gt;= options.colors.length) {
                    i = 0;
                    ++variation;
                }
            }

           
            var colori = 0, s;
            for (i = 0; i &lt; series.length; ++i) {
                s = series[i];

                
                if (s.color == null) {
                    s.color = colors[colori].toString();
                    ++colori;
                }
                else if (typeof s.color == "number")
                    s.color = colors[s.color].toString();

                
                s.lines = $.extend(true, {}, options.lines, s.lines);
                s.points = $.extend(true, {}, options.points, s.points);
                s.bars = $.extend(true, {}, options.bars, s.bars);
                if (s.shadowSize == null)
                    s.shadowSize = options.shadowSize;
                if (s.xaxis &amp;&amp; s.xaxis == 2)
                    s.xaxis = axes.x2axis;
                else
                    s.xaxis = axes.xaxis;
                if (s.yaxis &amp;&amp; s.yaxis == 2)
                    s.yaxis = axes.y2axis;
                else
                    s.yaxis = axes.yaxis;
            }
        }
        
        function processData() {
            var topSentry = Number.POSITIVE_INFINITY,
                bottomSentry = Number.NEGATIVE_INFINITY,
                axis;

            for (axis in axes) {
                axes[axis].datamin = topSentry;
                axes[axis].datamax = bottomSentry;
                axes[axis].used = false;
            }
            
            for (var i = 0; i &lt; series.length; ++i) {
                var data = series[i].data,
                    axisx = series[i].xaxis,
                    axisy = series[i].yaxis,
                    mindelta = 0, maxdelta = 0;
                
                
                if (series[i].bars.show) {
                    mindelta = series[i].bars.align == "left" ? 0 : -series[i].bars.barWidth/2;
                    maxdelta = mindelta + series[i].bars.barWidth;
                }
                
                axisx.used = axisy.used = true;
                for (var j = 0; j &lt; data.length; ++j) {
                    if (data[j] == null)
                        continue;
                    
                    var x = data[j][0], y = data[j][1];

                   
                    if (x != null &amp;&amp; !isNaN(x = +x)) {
                        if (x + mindelta &lt; axisx.datamin)
                            axisx.datamin = x + mindelta;
                        if (x + maxdelta &gt; axisx.datamax)
                            axisx.datamax = x + maxdelta;
                    }
                    
                    if (y != null &amp;&amp; !isNaN(y = +y)) {
                        if (y &lt; axisy.datamin)
                            axisy.datamin = y;
                        if (y &gt; axisy.datamax)
                            axisy.datamax = y;
                    }
                    
                    if (x == null || y == null || isNaN(x) || isNaN(y))
                        data[j] = null; 
                }
            }

            for (axis in axes) {
                if (axes[axis].datamin == topSentry)
                    axes[axis].datamin = 0;
                if (axes[axis].datamax == bottomSentry)
                    axes[axis].datamax = 1;
            }
        }

        function constructCanvas() {
            canvasWidth = target.width();
            canvasHeight = target.height();
            target.html("");
            target.css("position", "relative"); 

            if (canvasWidth &lt;= 0 || canvasHeight &lt;= 0)
                throw "Invalid dimensions for plot, width = " + canvasWidth + ", height = " + canvasHeight;

           
            canvas = $('&lt;canvas width="' + canvasWidth + '" height="' + canvasHeight + '"&gt;&lt;/canvas&gt;').appendTo(target).get(0);
            if ($.browser.msie) 
                canvas = window.G_vmlCanvasManager.initElement(canvas);
            ctx = canvas.getContext("2d");

           
            overlay = $('&lt;canvas style="position:absolute;left:0px;top:0px;" width="' + canvasWidth + '" height="' + canvasHeight + '"&gt;&lt;/canvas&gt;').appendTo(target).get(0);
            if ($.browser.msie) 
                overlay = window.G_vmlCanvasManager.initElement(overlay);
            octx = overlay.getContext("2d");


            eventHolder = $([overlay, canvas]);


            if (options.selection.mode != null || options.grid.hoverable) {

                eventHolder.each(function () {
                    this.onmousemove = onMouseMove;
                });

                if (options.selection.mode != null)
                    eventHolder.mousedown(onMouseDown);
            }

            if (options.grid.clickable)
                eventHolder.click(onClick);
        }

        function setupGrid() {
            function setupAxis(axis, options) {
                setRange(axis, options);
                prepareTickGeneration(axis, options);
                setTicks(axis, options);

                if (axis == axes.xaxis || axis == axes.x2axis) {

                    axis.p2c = function (p) { return (p - axis.min) * axis.scale; };
 
                    axis.c2p = function (c) { return axis.min + c / axis.scale; };
                }
                else {
                    axis.p2c = function (p) { return (axis.max - p) * axis.scale; };
                    axis.c2p = function (p) { return axis.max - p / axis.scale; };
                }
            }

            for (var axis in axes)
                setupAxis(axes[axis], options[axis]);

            setSpacing();
            insertLabels();
            insertLegend();
        }
        
        function setRange(axis, axisOptions) {
            var min = axisOptions.min != null ? axisOptions.min : axis.datamin;
            var max = axisOptions.max != null ? axisOptions.max : axis.datamax;

            if (max - min == 0.0) {

                var widen;
                if (max == 0.0)
                    widen = 1.0;
                else
                    widen = 0.01;

                min -= widen;
                max += widen;
            }
            else {

                var margin = axisOptions.autoscaleMargin;
                if (margin != null) {
                    if (axisOptions.min == null) {
                        min -= (max - min) * margin;

                        if (min &lt; 0 &amp;&amp; axis.datamin &gt;= 0)
                            min = 0;
                    }
                    if (axisOptions.max == null) {
                        max += (max - min) * margin;
                        if (max &gt; 0 &amp;&amp; axis.datamax &lt;= 0)
                            max = 0;
                    }
                }
            }
            axis.min = min;
            axis.max = max;
        }

        function prepareTickGeneration(axis, axisOptions) {

            var noTicks;
            if (typeof axisOptions.ticks == "number" &amp;&amp; axisOptions.ticks &gt; 0)
                noTicks = axisOptions.ticks;
            else if (axis == axes.xaxis || axis == axes.x2axis)
                noTicks = canvasWidth / 100;
            else
                noTicks = canvasHeight / 60;
            
            var delta = (axis.max - axis.min) / noTicks;
            var size, generator, unit, formatter, i, magn, norm;

            if (axisOptions.mode == "time") {

                
                function formatDate(d, fmt, monthNames) {
                    var leftPad = function(n) {
                        n = "" + n;
                        return n.length == 1 ? "0" + n : n;
                    };
                    
                    var r = [];
                    var escape = false;
                    if (monthNames == null)
                        monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
                    for (var i = 0; i &lt; fmt.length; ++i) {
                        var c = fmt.charAt(i);
                        
                        if (escape) {
                            switch (c) {
                            case 'h': c = "" + d.getUTCHours(); break;
                            case 'H': c = leftPad(d.getUTCHours()); break;
                            case 'M': c = leftPad(d.getUTCMinutes()); break;
                            case 'S': c = leftPad(d.getUTCSeconds()); break;
                            case 'd': c = "" + d.getUTCDate(); break;
                            case 'm': c = "" + (d.getUTCMonth() + 1); break;
                            case 'y': c = "" + d.getUTCFullYear(); break;
                            case 'b': c = "" + monthNames[d.getUTCMonth()]; break;
                            }
                            r.push(c);
                            escape = false;
                        }
                        else {
                            if (c == "%")
                                escape = true;
                            else
                                r.push(c);
                        }
                    }
                    return r.join("");
                }
                
                    

                var timeUnitSize = {
                    "second": 1000,
                    "minute": 60 * 1000,
                    "hour": 60 * 60 * 1000,
                    "day": 24 * 60 * 60 * 1000,
                    "month": 30 * 24 * 60 * 60 * 1000,
                    "year": 365.2425 * 24 * 60 * 60 * 1000
                };


                var spec = [
                    [1, "second"], [2, "second"], [5, "second"], [10, "second"],
                    [30, "second"], 
                    [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"],
                    [30, "minute"], 
                    [1, "hour"], [2, "hour"], [4, "hour"],
                    [8, "hour"], [12, "hour"],
                    [1, "day"], [2, "day"], [3, "day"],
                    [0.25, "month"], [0.5, "month"], [1, "month"],
                    [2, "month"], [3, "month"], [6, "month"],
                    [1, "year"]
                ];

                var minSize = 0;
                if (axisOptions.minTickSize != null) {
                    if (typeof axisOptions.tickSize == "number")
                        minSize = axisOptions.tickSize;
                    else
                        minSize = axisOptions.minTickSize[0] * timeUnitSize[axisOptions.minTickSize[1]];
                }

                for (i = 0; i &lt; spec.length - 1; ++i)
                    if (delta &lt; (spec[i][0] * timeUnitSize[spec[i][1]]
                                 + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2
                       &amp;&amp; spec[i][0] * timeUnitSize[spec[i][1]] &gt;= minSize)
                        break;
                size = spec[i][0];
                unit = spec[i][1];
                
 
                if (unit == "year") {
                    magn = Math.pow(10, Math.floor(Math.log(delta / timeUnitSize.year) / Math.LN10));
                    norm = (delta / timeUnitSize.year) / magn;
                    if (norm &lt; 1.5)
                        size = 1;
                    else if (norm &lt; 3)
                        size = 2;
                    else if (norm &lt; 7.5)
                        size = 5;
                    else
                        size = 10;

                    size *= magn;
                }

                if (axisOptions.tickSize) {
                    size = axisOptions.tickSize[0];
                    unit = axisOptions.tickSize[1];
                }
                
                generator = function(axis) {
                    var ticks = [],
                        tickSize = axis.tickSize[0], unit = axis.tickSize[1],
                        d = new Date(axis.min);
                    
                    var step = tickSize * timeUnitSize[unit];

                    if (unit == "second")
                        d.setUTCSeconds(floorInBase(d.getUTCSeconds(), tickSize));
                    if (unit == "minute")
                        d.setUTCMinutes(floorInBase(d.getUTCMinutes(), tickSize));
                    if (unit == "hour")
                        d.setUTCHours(floorInBase(d.getUTCHours(), tickSize));
                    if (unit == "month")
                        d.setUTCMonth(floorInBase(d.getUTCMonth(), tickSize));
                    if (unit == "year")
                        d.setUTCFullYear(floorInBase(d.getUTCFullYear(), tickSize));
                    

                    d.setUTCMilliseconds(0);
                    if (step &gt;= timeUnitSize.minute)
                        d.setUTCSeconds(0);
                    if (step &gt;= timeUnitSize.hour)
                        d.setUTCMinutes(0);
                    if (step &gt;= timeUnitSize.day)
                        d.setUTCHours(0);
                    if (step &gt;= timeUnitSize.day * 4)
                        d.setUTCDate(1);
                    if (step &gt;= timeUnitSize.year)
                        d.setUTCMonth(0);


                    var carry = 0, v = Number.NaN, prev;
                    do {
                        prev = v;
                        v = d.getTime();
                        ticks.push({ v: v, label: axis.tickFormatter(v, axis) });
                        if (unit == "month") {
                            if (tickSize &lt; 1) {
         
                                d.setUTCDate(1);
                                var start = d.getTime();
                                d.setUTCMonth(d.getUTCMonth() + 1);
                                var end = d.getTime();
                                d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);
                                carry = d.getUTCHours();
                                d.setUTCHours(0);
                            }
                            else
                                d.setUTCMonth(d.getUTCMonth() + tickSize);
                        }
                        else if (unit == "year") {
                            d.setUTCFullYear(d.getUTCFullYear() + tickSize);
                        }
                        else
                            d.setTime(v + step);
                    } while (v &lt; axis.max &amp;&amp; v != prev);

                    return ticks;
                };

                formatter = function (v, axis) {
                    var d = new Date(v);

       
                    if (axisOptions.timeformat != null)
                        return formatDate(d, axisOptions.timeformat, axisOptions.monthNames);
                    
                    var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];
                    var span = axis.max - axis.min;
                    
                    if (t &lt; timeUnitSize.minute)
                        fmt = "%h:%M:%S";
                    else if (t &lt; timeUnitSize.day) {
                        if (span &lt; 2 * timeUnitSize.day)
                            fmt = "%h:%M";
                        else
                            fmt = "%b %d %h:%M";
                    }
                    else if (t &lt; timeUnitSize.month)
                        fmt = "%b %d";
                    else if (t &lt; timeUnitSize.year) {
                        if (span &lt; timeUnitSize.year)
                            fmt = "%b";
                        else
                            fmt = "%b %y";
                    }
                    else
                        fmt = "%y";
                    
                    return formatDate(d, fmt, axisOptions.monthNames);
                };
            }
            else {
    
                var maxDec = axisOptions.tickDecimals;
                var dec = -Math.floor(Math.log(delta) / Math.LN10);
                if (maxDec != null &amp;&amp; dec &gt; maxDec)
                    dec = maxDec;
                
                magn = Math.pow(10, -dec);
                norm = delta / magn; 
                
                if (norm &lt; 1.5)
                    size = 1;
                else if (norm &lt; 3) {
                    size = 2;
    
                    if (norm &gt; 2.25 &amp;&amp; (maxDec == null || dec + 1 &lt;= maxDec)) {
                        size = 2.5;
                        ++dec;
                    }
                }
                else if (norm &lt; 7.5)
                    size = 5;
                else
                    size = 10;

                size *= magn;
                
                if (axisOptions.minTickSize != null &amp;&amp; size &lt; axisOptions.minTickSize)
                    size = axisOptions.minTickSize;

                if (axisOptions.tickSize != null)
                    size = axisOptions.tickSize;
                
                axis.tickDecimals = Math.max(0, (maxDec != null) ? maxDec : dec);
                
                generator = function (axis) {
                    var ticks = [];

          
                    var start = floorInBase(axis.min, axis.tickSize),
                        i = 0, v = Number.NaN, prev;
                    do {
                        prev = v;
                        v = start + i * axis.tickSize;
                        ticks.push({ v: v, label: axis.tickFormatter(v, axis) });
                        ++i;
                    } while (v &lt; axis.max &amp;&amp; v != prev);
                    return ticks;
                };

                formatter = function (v, axis) {
                    return v.toFixed(axis.tickDecimals);
                };
            }

            axis.tickSize = unit ? [size, unit] : size;
            axis.tickGenerator = generator;
            if ($.isFunction(axisOptions.tickFormatter))
                axis.tickFormatter = function (v, axis) { return "" + axisOptions.tickFormatter(v, axis); };
            else
                axis.tickFormatter = formatter;
            if (axisOptions.labelWidth != null)
                axis.labelWidth = axisOptions.labelWidth;
            if (axisOptions.labelHeight != null)
                axis.labelHeight = axisOptions.labelHeight;
        }
        
        function setTicks(axis, axisOptions) {
            axis.ticks = [];

            if (!axis.used)
                return;
            
            if (axisOptions.ticks == null)
                axis.ticks = axis.tickGenerator(axis);
            else if (typeof axisOptions.ticks == "number") {
                if (axisOptions.ticks &gt; 0)
                    axis.ticks = axis.tickGenerator(axis);
            }
            else if (axisOptions.ticks) {
                var ticks = axisOptions.ticks;

                if ($.isFunction(ticks))
            
                    ticks = ticks({ min: axis.min, max: axis.max });
                
            
                var i, v;
                for (i = 0; i &lt; ticks.length; ++i) {
                    var label = null;
                    var t = ticks[i];
                    if (typeof t == "object") {
                        v = t[0];
                        if (t.length &gt; 1)
                            label = t[1];
                    }
                    else
                        v = t;
                    if (label == null)
                        label = axis.tickFormatter(v, axis);
                    axis.ticks[i] = { v: v, label: label };
                }
            }

            if (axisOptions.autoscaleMargin != null &amp;&amp; axis.ticks.length &gt; 0) {
              
                if (axisOptions.min == null)
                    axis.min = Math.min(axis.min, axis.ticks[0].v);
                if (axisOptions.max == null &amp;&amp; axis.ticks.length &gt; 1)
                    axis.max = Math.min(axis.max, axis.ticks[axis.ticks.length - 1].v);
            }
        }
        
        function setSpacing() {
            function measureXLabels(axis) {
            
                if (axis.labelWidth == null)
                    axis.labelWidth = canvasWidth / 6;

                if (axis.labelHeight == null) {
                    labels = [];
                    for (i = 0; i &lt; axis.ticks.length; ++i) {
                        l = axis.ticks[i].label;
                        if (l)
                            labels.push('&lt;div class="tickLabel" style="float:left;width:' + axis.labelWidth + 'px"&gt;' + l + '&lt;/div&gt;');
                    }
                    
                    axis.labelHeight = 0;
                    if (labels.length &gt; 0) {
                        var dummyDiv = $('&lt;div style="position:absolute;top:-10000px;width:10000px;font-size:smaller"&gt;'
                                         + labels.join("") + '&lt;div style="clear:left"&gt;&lt;/div&gt;&lt;/div&gt;').appendTo(target);
                        axis.labelHeight = dummyDiv.height();
                        dummyDiv.remove();
                    }
                }
            }
            
            function measureYLabels(axis) {
                if (axis.labelWidth == null || axis.labelHeight == null) {
                    var i, labels = [], l;
               
                    for (i = 0; i &lt; axis.ticks.length; ++i) {
                        l = axis.ticks[i].label;
                        if (l)
                            labels.push('&lt;div class="tickLabel"&gt;' + l + '&lt;/div&gt;');
                    }
                    
                    if (labels.length &gt; 0) {
                        var dummyDiv = $('&lt;div style="position:absolute;top:-10000px;font-size:smaller"&gt;'
                                         + labels.join("") + '&lt;/div&gt;').appendTo(target);
                        if (axis.labelWidth == null)
                            axis.labelWidth = dummyDiv.width();
                        if (axis.labelHeight == null)
                            axis.labelHeight = dummyDiv.find("div").height();
                        dummyDiv.remove();
                    }
                    
                    if (axis.labelWidth == null)
                        axis.labelWidth = 0;
                    if (axis.labelHeight == null)
                        axis.labelHeight = 0;
                }
            }
            
            measureXLabels(axes.xaxis);
            measureYLabels(axes.yaxis);
            measureXLabels(axes.x2axis);
            measureYLabels(axes.y2axis);

            var maxOutset = options.grid.borderWidth / 2;
            for (i = 0; i &lt; series.length; ++i)
                maxOutset = Math.max(maxOutset, 2 * (series[i].points.radius + series[i].points.lineWidth/2));

            plotOffset.left = plotOffset.right = plotOffset.top = plotOffset.bottom = maxOutset;

            if (axes.xaxis.labelHeight &gt; 0)
                plotOffset.bottom = Math.max(maxOutset, axes.xaxis.labelHeight + options.grid.labelMargin);
            if (axes.yaxis.labelWidth &gt; 0)
                plotOffset.left = Math.max(maxOutset, axes.yaxis.labelWidth + options.grid.labelMargin);

            if (axes.x2axis.labelHeight &gt; 0)
                plotOffset.top = Math.max(maxOutset, axes.x2axis.labelHeight + options.grid.labelMargin);
            
            if (axes.y2axis.labelWidth &gt; 0)
                plotOffset.right = Math.max(maxOutset, axes.y2axis.labelWidth + options.grid.labelMargin);

            plotWidth = canvasWidth - plotOffset.left - plotOffset.right;
            plotHeight = canvasHeight - plotOffset.bottom - plotOffset.top;

 
            axes.xaxis.scale = plotWidth / (axes.xaxis.max - axes.xaxis.min);
            axes.yaxis.scale = plotHeight / (axes.yaxis.max - axes.yaxis.min);
            axes.x2axis.scale = plotWidth / (axes.x2axis.max - axes.x2axis.min);
            axes.y2axis.scale = plotHeight / (axes.y2axis.max - axes.y2axis.min);
        }
        
        function draw() {
            drawGrid();
            for (var i = 0; i &lt; series.length; i++) {
                drawSeries(series[i]);
            }
        }

        function extractRange(ranges, coord) {
            var firstAxis = coord + "axis",
                secondaryAxis = coord + "2axis",
                axis, from, to, reverse;

            if (ranges[firstAxis]) {
                axis = axes[firstAxis];
                from = ranges[firstAxis].from;
                to = ranges[firstAxis].to;
            }
            else if (ranges[secondaryAxis]) {
                axis = axes[secondaryAxis];
                from = ranges[secondaryAxis].from;
                to = ranges[secondaryAxis].to;
            }
            else {

                axis = axes[firstAxis];
                from = ranges[coord + "1"];
                to = ranges[coord + "2"];
            }


            if (from != null &amp;&amp; to != null &amp;&amp; from &gt; to)
                return { from: to, to: from, axis: axis };
            
            return { from: from, to: to, axis: axis };
        }
        
        function drawGrid() {
            var i;
            
            ctx.save();
            ctx.clearRect(0, 0, canvasWidth, canvasHeight);
            ctx.translate(plotOffset.left, plotOffset.top);

  
            if (options.grid.backgroundColor) {
                ctx.fillStyle = options.grid.backgroundColor;
                ctx.fillRect(0, 0, plotWidth, plotHeight);
            }


            if (options.grid.markings) {
                var markings = options.grid.markings;
                if ($.isFunction(markings))
      
                    markings = markings({ xmin: axes.xaxis.min, xmax: axes.xaxis.max, ymin: axes.yaxis.min, ymax: axes.yaxis.max, xaxis: axes.xaxis, yaxis: axes.yaxis, x2axis: axes.x2axis, y2axis: axes.y2axis });

                for (i = 0; i &lt; markings.length; ++i) {
                    var m = markings[i],
                        xrange = extractRange(m, "x"),
                        yrange = extractRange(m, "y");

        
                    if (xrange.from == null)
                        xrange.from = xrange.axis.min;
                    if (xrange.to == null)
                        xrange.to = xrange.axis.max;
                    if (yrange.from == null)
                        yrange.from = yrange.axis.min;
                    if (yrange.to == null)
                        yrange.to = yrange.axis.max;

                    if (xrange.to &lt; xrange.axis.min || xrange.from &gt; xrange.axis.max ||
                        yrange.to &lt; yrange.axis.min || yrange.from &gt; yrange.axis.max)
                        continue;

                    xrange.from = Math.max(xrange.from, xrange.axis.min);
                    xrange.to = Math.min(xrange.to, xrange.axis.max);
                    yrange.from = Math.max(yrange.from, yrange.axis.min);
                    yrange.to = Math.min(yrange.to, yrange.axis.max);

                    if (xrange.from == xrange.to &amp;&amp; yrange.from == yrange.to)
                        continue;

          
                    xrange.from = xrange.axis.p2c(xrange.from);
                    xrange.to = xrange.axis.p2c(xrange.to);
                    yrange.from = yrange.axis.p2c(yrange.from);
                    yrange.to = yrange.axis.p2c(yrange.to);
                    
                    if (xrange.from == xrange.to || yrange.from == yrange.to) {
                  
                        ctx.strokeStyle = m.color || options.grid.markingsColor;
                        ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth;
                        ctx.moveTo(Math.floor(xrange.from), Math.floor(yrange.from));
                        ctx.lineTo(Math.floor(xrange.to), Math.floor(yrange.to));
                        ctx.stroke();
                    }
                    else {
                
                        ctx.fillStyle = m.color || options.grid.markingsColor;
                        ctx.fillRect(Math.floor(xrange.from),
                                     Math.floor(yrange.to),
                                     Math.floor(xrange.to - xrange.from),
                                     Math.floor(yrange.from - yrange.to));
                    }
                }
            }
            
         
            ctx.lineWidth = 1;
            ctx.strokeStyle = options.grid.tickColor;
            ctx.beginPath();
            var v, axis = axes.xaxis;
            for (i = 0; i &lt; axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v &lt;= axis.min || v &gt;= axes.xaxis.max)
                    continue;   

                ctx.moveTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, 0);
                ctx.lineTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, plotHeight);
            }

            axis = axes.yaxis;
            for (i = 0; i &lt; axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v &lt;= axis.min || v &gt;= axis.max)
                    continue;

                ctx.moveTo(0, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
                ctx.lineTo(plotWidth, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
            }

            axis = axes.x2axis;
            for (i = 0; i &lt; axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v &lt;= axis.min || v &gt;= axis.max)
                    continue;
    
                ctx.moveTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, -5);
                ctx.lineTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, 5);
            }

            axis = axes.y2axis;
            for (i = 0; i &lt; axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v &lt;= axis.min || v &gt;= axis.max)
                    continue;

                ctx.moveTo(plotWidth-5, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
                ctx.lineTo(plotWidth+5, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
            }
            
            ctx.stroke();
            
            if (options.grid.borderWidth) {
            
                ctx.lineWidth = options.grid.borderWidth;
                ctx.strokeStyle = options.grid.color;
                ctx.lineJoin = "round";
                ctx.strokeRect(0, 0, plotWidth, plotHeight);
            }

            ctx.restore();
        }
        
        function insertLabels() {
            target.find(".tickLabels").remove();
            
            var html = '&lt;div class="tickLabels" style="font-size:smaller;color:' + options.grid.color + '"&gt;';

            function addLabels(axis, labelGenerator) {
                for (var i = 0; i &lt; axis.ticks.length; ++i) {
                    var tick = axis.ticks[i];
                    if (!tick.label || tick.v &lt; axis.min || tick.v &gt; axis.max)
                        continue;
                    html += labelGenerator(tick, axis);
                }
            }
            
            addLabels(axes.xaxis, function (tick, axis) {
                return '&lt;div style="position:absolute;top:' + (plotOffset.top + plotHeight + options.grid.labelMargin) + 'px;left:' + (plotOffset.left + axis.p2c(tick.v) - axis.labelWidth/2) + 'px;width:' + axis.labelWidth + 'px;text-align:center" class="tickLabel"&gt;' + tick.label + "&lt;/div&gt;";
            });
            
            
            addLabels(axes.yaxis, function (tick, axis) {
                return '&lt;div style="position:absolute;top:' + (plotOffset.top + axis.p2c(tick.v) - axis.labelHeight/2) + 'px;right:' + (plotOffset.right + plotWidth + options.grid.labelMargin) + 'px;width:' + axis.labelWidth + 'px;text-align:right" class="tickLabel"&gt;' + tick.label + "&lt;/div&gt;";
            });
            
            addLabels(axes.x2axis, function (tick, axis) {
                return '&lt;div style="position:absolute;bottom:' + (plotOffset.bottom + plotHeight + options.grid.labelMargin) + 'px;left:' + (plotOffset.left + axis.p2c(tick.v) - axis.labelWidth/2) + 'px;width:' + axis.labelWidth + 'px;text-align:center" class="tickLabel"&gt;' + tick.label + "&lt;/div&gt;";
            });
            
            addLabels(axes.y2axis, function (tick, axis) {
                return '&lt;div style="position:absolute;top:' + (plotOffset.top + axis.p2c(tick.v) - axis.labelHeight/2) + 'px;left:' + (plotOffset.left + plotWidth + options.grid.labelMargin) +'px;width:' + axis.labelWidth + 'px;text-align:left" class="tickLabel"&gt;' + tick.label + "&lt;/div&gt;";
            });

            html += '&lt;/div&gt;';
            
            target.append(html);
        }

        function drawSeries(series) {
            if (series.lines.show || (!series.bars.show &amp;&amp; !series.points.show))
                drawSeriesLines(series);
            if (series.bars.show)
                drawSeriesBars(series);
            if (series.points.show)
                drawSeriesPoints(series);
        }
        
        function drawSeriesLines(series) {
            function plotLine(data, offset, axisx, axisy) {
                var prev, cur = null, drawx = null, drawy = null;
                
                ctx.beginPath();
                for (var i = 0; i &lt; data.length; ++i) {
                    prev = cur;
                    cur = data[i];

                    if (prev == null || cur == null)
                        continue;
                    
                    var x1 = prev[0], y1 = prev[1],
                        x2 = cur[0], y2 = cur[1];

             
                    if (y1 &lt;= y2 &amp;&amp; y1 &lt; axisy.min) {
                        if (y2 &lt; axisy.min)
                            continue; 
                    
                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.min;
                    }
                    else if (y2 &lt;= y1 &amp;&amp; y2 &lt; axisy.min) {
                        if (y1 &lt; axisy.min)
                            continue;
                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.min;
                    }

                
                    if (y1 &gt;= y2 &amp;&amp; y1 &gt; axisy.max) {
                        if (y2 &gt; axisy.max)
                            continue;
                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.max;
                    }
                    else if (y2 &gt;= y1 &amp;&amp; y2 &gt; axisy.max) {
                        if (y1 &gt; axisy.max)
                            continue;
                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.max;
                    }

                 
                    if (x1 &lt;= x2 &amp;&amp; x1 &lt; axisx.min) {
                        if (x2 &lt; axisx.min)
                            continue;
                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.min;
                    }
                    else if (x2 &lt;= x1 &amp;&amp; x2 &lt; axisx.min) {
                        if (x1 &lt; axisx.min)
                            continue;
                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.min;
                    }

               
                    if (x1 &gt;= x2 &amp;&amp; x1 &gt; axisx.max) {
                        if (x2 &gt; axisx.max)
                            continue;
                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.max;
                    }
                    else if (x2 &gt;= x1 &amp;&amp; x2 &gt; axisx.max) {
                        if (x1 &gt; axisx.max)
                            continue;
                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.max;
                    }

                    if (drawx != axisx.p2c(x1) || drawy != axisy.p2c(y1) + offset)
                        ctx.moveTo(axisx.p2c(x1), axisy.p2c(y1) + offset);
                    
                    drawx = axisx.p2c(x2);
                    drawy = axisy.p2c(y2) + offset;
                    ctx.lineTo(drawx, drawy);
                }
                ctx.stroke();
            }

            function plotLineArea(data, axisx, axisy) {
                var prev, cur = null;
                
                var bottom = Math.min(Math.max(0, axisy.min), axisy.max);
                var top, lastX = 0;

                var areaOpen = false;
                
                for (var i = 0; i &lt; data.length; ++i) {
                    prev = cur;
                    cur = data[i];

                    if (areaOpen &amp;&amp; prev != null &amp;&amp; cur == null) {
                   
                        ctx.lineTo(axisx.p2c(lastX), axisy.p2c(bottom));
                        ctx.fill();
                        areaOpen = false;
                        continue;
                    }

                    if (prev == null || cur == null)
                        continue;
                        
                    var x1 = prev[0], y1 = prev[1],
                        x2 = cur[0], y2 = cur[1];

                  
                    if (x1 &lt;= x2 &amp;&amp; x1 &lt; axisx.min) {
                        if (x2 &lt; axisx.min)
                            continue;
                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.min;
                    }
                    else if (x2 &lt;= x1 &amp;&amp; x2 &lt; axisx.min) {
                        if (x1 &lt; axisx.min)
                            continue;
                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.min;
                    }

                
                    if (x1 &gt;= x2 &amp;&amp; x1 &gt; axisx.max) {
                        if (x2 &gt; axisx.max)
                            continue;
                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.max;
                    }
                    else if (x2 &gt;= x1 &amp;&amp; x2 &gt; axisx.max) {
                        if (x1 &gt; axisx.max)
                            continue;
                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.max;
                    }

                    if (!areaOpen) {
               
                        ctx.beginPath();
                        ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));
                        areaOpen = true;
                    }
                    
                  
                    if (y1 &gt;= axisy.max &amp;&amp; y2 &gt;= axisy.max) {
                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));
                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));
                        continue;
                    }
                    else if (y1 &lt;= axisy.min &amp;&amp; y2 &lt;= axisy.min) {
                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));
                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));
                        continue;
                    }
                    
                
                    var x1old = x1, x2old = x2;

                 
                    if (y1 &lt;= y2 &amp;&amp; y1 &lt; axisy.min &amp;&amp; y2 &gt;= axisy.min) {
                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.min;
                    }
                    else if (y2 &lt;= y1 &amp;&amp; y2 &lt; axisy.min &amp;&amp; y1 &gt;= axisy.min) {
                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.min;
                    }

                  
                    if (y1 &gt;= y2 &amp;&amp; y1 &gt; axisy.max &amp;&amp; y2 &lt;= axisy.max) {
                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.max;
                    }
                    else if (y2 &gt;= y1 &amp;&amp; y2 &gt; axisy.max &amp;&amp; y1 &lt;= axisy.max) {
                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.max;
                    }


               
                    if (x1 != x1old) {
                        if (y1 &lt;= axisy.min)
                            top = axisy.min;
                        else
                            top = axisy.max;
                        
                        ctx.lineTo(axisx.p2c(x1old), axisy.p2c(top));
                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(top));
                    }
                    
             
                    ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));
                    ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));

                 
                    if (x2 != x2old) {
                        if (y2 &lt;= axisy.min)
                            top = axisy.min;
                        else
                            top = axisy.max;
                        
                        ctx.lineTo(axisx.p2c(x2old), axisy.p2c(top));
                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(top));
                    }

                    lastX = Math.max(x2, x2old);
                }

                if (areaOpen) {
                    ctx.lineTo(axisx.p2c(lastX), axisy.p2c(bottom));
                    ctx.fill();
                }
            }
            
            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);
            ctx.lineJoin = "round";

            var lw = series.lines.lineWidth;
            var sw = series.shadowSize;
        
            if (sw &gt; 0) {
              
                ctx.lineWidth = sw / 2;
                ctx.strokeStyle = "rgba(0,0,0,0.1)";
                plotLine(series.data, lw/2 + sw/2 + ctx.lineWidth/2, series.xaxis, series.yaxis);

                ctx.lineWidth = sw / 2;
                ctx.strokeStyle = "rgba(0,0,0,0.2)";
                plotLine(series.data, lw/2 + ctx.lineWidth/2, series.xaxis, series.yaxis);
            }

            ctx.lineWidth = lw;
            ctx.strokeStyle = series.color;
            setFillStyle(series.lines, series.color);
            if (series.lines.fill)
                plotLineArea(series.data, series.xaxis, series.yaxis);
            plotLine(series.data, 0, series.xaxis, series.yaxis);
            ctx.restore();
        }

        function drawSeriesPoints(series) {
            function plotPoints(data, radius, fill, axisx, axisy) {
                for (var i = 0; i &lt; data.length; ++i) {
                    if (data[i] == null)
                        continue;
                    
                    var x = data[i][0], y = data[i][1];
                    if (x &lt; axisx.min || x &gt; axisx.max || y &lt; axisy.min || y &gt; axisy.max)
                        continue;
                    
                    ctx.beginPath();
                    ctx.arc(axisx.p2c(x), axisy.p2c(y), radius, 0, 2 * Math.PI, true);
                    if (fill)
                        ctx.fill();
                    ctx.stroke();
                }
            }

            function plotPointShadows(data, offset, radius, axisx, axisy) {
                for (var i = 0; i &lt; data.length; ++i) {
                    if (data[i] == null)
                        continue;
                    
                    var x = data[i][0], y = data[i][1];
                    if (x &lt; axisx.min || x &gt; axisx.max || y &lt; axisy.min || y &gt; axisy.max)
                        continue;
                    ctx.beginPath();
                    ctx.arc(axisx.p2c(x), axisy.p2c(y) + offset, radius, 0, Math.PI, false);
                    ctx.stroke();
                }
            }
            
            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);

            var lw = series.lines.lineWidth;
            var sw = series.shadowSize;
            if (sw &gt; 0) {
            
                ctx.lineWidth = sw / 2;
                ctx.strokeStyle = "rgba(0,0,0,0.1)";
                plotPointShadows(series.data, sw/2 + ctx.lineWidth/2,
                                 series.points.radius, series.xaxis, series.yaxis);

                ctx.lineWidth = sw / 2;
                ctx.strokeStyle = "rgba(0,0,0,0.2)";
                plotPointShadows(series.data, ctx.lineWidth/2,
                                 series.points.radius, series.xaxis, series.yaxis);
            }

            ctx.lineWidth = series.points.lineWidth;
            ctx.strokeStyle = series.color;
            setFillStyle(series.points, series.color);
            plotPoints(series.data, series.points.radius, series.points.fill,
                       series.xaxis, series.yaxis);
            ctx.restore();
        }

        function drawBar(x, y, barLeft, barRight, offset, fill, axisx, axisy, c) {
            var drawLeft = true, drawRight = true,
                drawTop = true, drawBottom = false,
                left = x + barLeft, right = x + barRight,
                bottom = 0, top = y;

          
            if (top &lt; bottom) {
                top = 0;
                bottom = y;
                drawBottom = true;
                drawTop = false;
            }
            
          
            if (right &lt; axisx.min || left &gt; axisx.max ||
                top &lt; axisy.min || bottom &gt; axisy.max)
                return;
            
            if (left &lt; axisx.min) {
                left = axisx.min;
                drawLeft = false;
            }

            if (right &gt; axisx.max) {
                right = axisx.max;
                drawRight = false;
            }

            if (bottom &lt; axisy.min) {
                bottom = axisy.min;
                drawBottom = false;
            }
            
            if (top &gt; axisy.max) {
                top = axisy.max;
                drawTop = false;
            }

           
            if (fill) {
                c.beginPath();
                c.moveTo(axisx.p2c(left), axisy.p2c(bottom) + offset);
                c.lineTo(axisx.p2c(left), axisy.p2c(top) + offset);
                c.lineTo(axisx.p2c(right), axisy.p2c(top) + offset);
                c.lineTo(axisx.p2c(right), axisy.p2c(bottom) + offset);
                c.fill();
            }

            if (drawLeft || drawRight || drawTop || drawBottom) {
                c.beginPath();
                left = axisx.p2c(left);
                bottom = axisy.p2c(bottom);
                right = axisx.p2c(right);
                top = axisy.p2c(top);
                
                c.moveTo(left, bottom + offset);
                if (drawLeft)
                    c.lineTo(left, top + offset);
                else
                    c.moveTo(left, top + offset);
                if (drawTop)
                    c.lineTo(right, top + offset);
                else
                    c.moveTo(right, top + offset);
                if (drawRight)
                    c.lineTo(right, bottom + offset);
                else
                    c.moveTo(right, bottom + offset);
                if (drawBottom)
                    c.lineTo(left, bottom + offset);
                else
                    c.moveTo(left, bottom + offset);
                c.stroke();
            }
        }
        
        function drawSeriesBars(series) {
            function plotBars(data, barLeft, barRight, offset, fill, axisx, axisy) {
                for (var i = 0; i &lt; data.length; i++) {
                    if (data[i] == null)
                        continue;
                    drawBar(data[i][0], data[i][1], barLeft, barRight, offset, fill, axisx, axisy, ctx);
                }
            }

            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);
            ctx.lineJoin = "round";

            ctx.lineWidth = series.bars.lineWidth;
            ctx.strokeStyle = series.color;
            setFillStyle(series.bars, series.color);
            var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2;
            plotBars(series.data, barLeft, barLeft + series.bars.barWidth, 0, series.bars.fill, series.xaxis, series.yaxis);
            ctx.restore();
        }

        function setFillStyle(obj, seriesColor) {
            var fill = obj.fill;
            if (!fill)
                return;
            
            if (obj.fillColor)
                ctx.fillStyle = obj.fillColor;
            else {
                var c = parseColor(seriesColor);
                c.a = typeof fill == "number" ? fill : 0.4;
                c.normalize();
                ctx.fillStyle = c.toString();
            }
        }
        
        function insertLegend() {
            target.find(".legend").remove();

            if (!options.legend.show)
                return;
            
            var fragments = [];
            var rowStarted = false;
            for (i = 0; i &lt; series.length; ++i) {
                if (!series[i].label)
                    continue;
                
                if (i % options.legend.noColumns == 0) {
                    if (rowStarted)
                        fragments.push('&lt;/tr&gt;');
                    fragments.push('&lt;tr&gt;');
                    rowStarted = true;
                }

                var label = series[i].label;
                if (options.legend.labelFormatter != null)
                    label = options.legend.labelFormatter(label);
                
                fragments.push(
                    '&lt;td class="legendColorBox"&gt;&lt;div style="border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px"&gt;&lt;div style="width:14px;height:10px;background-color:' + series[i].color + ';overflow:hidden"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;' +
                    '&lt;td class="legendLabel"&gt;' + label + '&lt;/td&gt;');
            }
            if (rowStarted)
                fragments.push('&lt;/tr&gt;');
            
            if (fragments.length == 0)
                return;

            var table = '&lt;table style="font-size:smaller;color:' + options.grid.color + '"&gt;' + fragments.join("") + '&lt;/table&gt;';
            if (options.legend.container != null)
                options.legend.container.html(table);
            else {
                var pos = "";
                var p = options.legend.position, m = options.legend.margin;
                if (p.charAt(0) == "n")
                    pos += 'top:' + (m + plotOffset.top) + 'px;';
                else if (p.charAt(0) == "s")
                    pos += 'bottom:' + (m + plotOffset.bottom) + 'px;';
                if (p.charAt(1) == "e")
                    pos += 'right:' + (m + plotOffset.right) + 'px;';
                else if (p.charAt(1) == "w")
                    pos += 'left:' + (m + plotOffset.left) + 'px;';
                var legend = $('&lt;div class="legend"&gt;' + table.replace('style="', 'style="position:absolute;' + pos +';') + '&lt;/div&gt;').appendTo(target);
                if (options.legend.backgroundOpacity != 0.0) {
        
                    var c = options.legend.backgroundColor;
                    if (c == null) {
                        var tmp;
                        if (options.grid.backgroundColor)
                            tmp = options.grid.backgroundColor;
                        else
                            tmp = extractColor(legend);
                        c = parseColor(tmp).adjust(null, null, null, 1).toString();
                    }
                    var div = legend.children();
                    $('&lt;div style="position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';"&gt; &lt;/div&gt;').prependTo(legend).css('opacity', options.legend.backgroundOpacity);
                    
                }
            }
        }



        
        var lastMousePos = { pageX: null, pageY: null },
            selection = {
                first: { x: -1, y: -1}, second: { x: -1, y: -1},
                show: false, active: false },
            highlights = [],
            clickIsMouseUp = false,
            redrawTimeout = null,
            hoverTimeout = null;
  
        function findNearbyItem(mouseX, mouseY) {
            var maxDistance = options.grid.mouseActiveRadius,
                lowestDistance = maxDistance * maxDistance + 1,
                item = null, foundPoint = false;

            function result(i, j) {
                return { datapoint: series[i].data[j],
                         dataIndex: j,
                         series: series[i],
                         seriesIndex: i };
            }
            
            for (var i = 0; i &lt; series.length; ++i) {
                var data = series[i].data,
                    axisx = series[i].xaxis,
                    axisy = series[i].yaxis,
                
              
                    mx = axisx.c2p(mouseX),
                    my = axisy.c2p(mouseY),
                    maxx = maxDistance / axisx.scale,
                    maxy = maxDistance / axisy.scale,
                    checkbar = series[i].bars.show,
                    checkpoint = !(series[i].bars.show &amp;&amp; !(series[i].lines.show || series[i].points.show)),
                    barLeft = series[i].bars.align == "left" ? 0 : -series[i].bars.barWidth/2,
                    barRight = barLeft + series[i].bars.barWidth;
                for (var j = 0; j &lt; data.length; ++j) {
                    if (data[j] == null)
                        continue;

                    var x = data[j][0], y = data[j][1];
  
                    if (checkbar) {
                      
                        if (!foundPoint &amp;&amp; mx &gt;= x + barLeft &amp;&amp;
                            mx &lt;= x + barRight &amp;&amp;
                            my &gt;= Math.min(0, y) &amp;&amp; my &lt;= Math.max(0, y))
                            item = result(i, j);
                    }
 
                    if (checkpoint) {
                      
                        if ((x - mx &gt; maxx || x - mx &lt; -maxx) ||
                            (y - my &gt; maxy || y - my &lt; -maxy))
                            continue;

                        
                        var dx = Math.abs(axisx.p2c(x) - mouseX),
                            dy = Math.abs(axisy.p2c(y) - mouseY),
                            dist = dx * dx + dy * dy;
                        if (dist &lt; lowestDistance) {
                            lowestDistance = dist;
                            foundPoint = true;
                            item = result(i, j);
                        }
                    }
                }
            }

            return item;
        }

        function onMouseMove(ev) {
        
            var e = ev || window.event;
            if (e.pageX == null &amp;&amp; e.clientX != null) {
                var de = document.documentElement, b = document.body;
                lastMousePos.pageX = e.clientX + (de &amp;&amp; de.scrollLeft || b.scrollLeft || 0);
                lastMousePos.pageY = e.clientY + (de &amp;&amp; de.scrollTop || b.scrollTop || 0);
            }
            else {
                lastMousePos.pageX = e.pageX;
                lastMousePos.pageY = e.pageY;
            }
            
            if (options.grid.hoverable &amp;&amp; !hoverTimeout)
                hoverTimeout = setTimeout(onHover, 100);

            if (selection.active)
                updateSelection(lastMousePos);
        }
        
        function onMouseDown(e) {
            if (e.which != 1) 
                return;
            
           
            document.body.focus();

            if (document.onselectstart !== undefined &amp;&amp; workarounds.onselectstart == null) {
                workarounds.onselectstart = document.onselectstart;
                document.onselectstart = function () { return false; };
            }
            if (document.ondrag !== undefined &amp;&amp; workarounds.ondrag == null) {
                workarounds.ondrag = document.ondrag;
                document.ondrag = function () { return false; };
            }
            
            setSelectionPos(selection.first, e);
                
            lastMousePos.pageX = null;
            selection.active = true;
            $(document).one("mouseup", onSelectionMouseUp);
        }

        function onClick(e) {
            if (clickIsMouseUp) {
                clickIsMouseUp = false;
                return;
            }

            triggerClickHoverEvent("plotclick", e);
        }
        
        function onHover() {
            triggerClickHoverEvent("plothover", lastMousePos);
            hoverTimeout = null;
        }

  
        function triggerClickHoverEvent(eventname, event) {
            var offset = eventHolder.offset(),
                pos = { pageX: event.pageX, pageY: event.pageY },
                canvasX = event.pageX - offset.left - plotOffset.left,
                canvasY = event.pageY - offset.top - plotOffset.top;

            if (axes.xaxis.used)
                pos.x = axes.xaxis.c2p(canvasX);
            if (axes.yaxis.used)
                pos.y = axes.yaxis.c2p(canvasY);
            if (axes.x2axis.used)
                pos.x2 = axes.x2axis.c2p(canvasX);
            if (axes.y2axis.used)
                pos.y2 = axes.y2axis.c2p(canvasY);

            var item = findNearbyItem(canvasX, canvasY);

            if (item) {
            
                item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left);
                item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top);

                    
            }

            if (options.grid.autoHighlight) {
                for (var i = 0; i &lt; highlights.length; ++i) {
                    var h = highlights[i];
                    if (h.auto &amp;&amp;
                        !(item &amp;&amp; h.series == item.series &amp;&amp; h.point == item.datapoint))
                        unhighlight(h.series, h.point);
                }
                
                if (item)
                    highlight(item.series, item.datapoint, true);
            }
            
            target.trigger(eventname, [ pos, item ]);
        }

        function triggerRedrawOverlay() {
            if (!redrawTimeout)
                redrawTimeout = setTimeout(redrawOverlay, 50);
        }

        function redrawOverlay() {
            redrawTimeout = null;

         
            octx.save();
            octx.clearRect(0, 0, canvasWidth, canvasHeight);
            octx.translate(plotOffset.left, plotOffset.top);
            
            var i, hi; 
            for (i = 0; i &lt; highlights.length; ++i) {
                hi = highlights[i];

                if (hi.series.bars.show)
                    drawBarHighlight(hi.series, hi.point);
                else
                    drawPointHighlight(hi.series, hi.point);
            }
            octx.restore();

        
            if (selection.show &amp;&amp; selectionIsSane()) {
                octx.strokeStyle = parseColor(options.selection.color).scale(null, null, null, 0.8).toString();
                octx.lineWidth = 1;
                ctx.lineJoin = "round";
                octx.fillStyle = parseColor(options.selection.color).scale(null, null, null, 0.4).toString();
                
                var x = Math.min(selection.first.x, selection.second.x),
                    y = Math.min(selection.first.y, selection.second.y),
                    w = Math.abs(selection.second.x - selection.first.x),
                    h = Math.abs(selection.second.y - selection.first.y);
                
                octx.fillRect(x + plotOffset.left, y + plotOffset.top, w, h);
                octx.strokeRect(x + plotOffset.left, y + plotOffset.top, w, h);
            }
        }
        
        function highlight(s, point, auto) {
            if (typeof s == "number")
                s = series[s];

            if (typeof point == "number")
                point = s.data[point];

            var i = indexOfHighlight(s, point);
            if (i == -1) {
                highlights.push({ series: s, point: point, auto: auto });

                triggerRedrawOverlay();
            }
            else if (!auto)
                highlights[i].auto = false;
        }
            
        function unhighlight(s, point) {
            if (typeof s == "number")
                s = series[s];

            if (typeof point == "number")
                point = s.data[point];

            var i = indexOfHighlight(s, point);
            if (i != -1) {
                highlights.splice(i, 1);

                triggerRedrawOverlay();
            }
        }
        
        function indexOfHighlight(s, p) {
            for (var i = 0; i &lt; highlights.length; ++i) {
                var h = highlights[i];
                if (h.series == s &amp;&amp; h.point[0] == p[0]
                    &amp;&amp; h.point[1] == p[1])
                    return i;
            }
            return -1;
        }
        
        function drawPointHighlight(series, point) {
            var x = point[0], y = point[1],
                axisx = series.xaxis, axisy = series.yaxis;
            
            if (x &lt; axisx.min || x &gt; axisx.max || y &lt; axisy.min || y &gt; axisy.max)
                return;
            
            var pointRadius = series.points.radius + series.points.lineWidth / 2;
            octx.lineWidth = pointRadius;
            octx.strokeStyle = parseColor(series.color).scale(1, 1, 1, 0.5).toString();
            var radius = 1.5 * pointRadius;
            octx.beginPath();
            octx.arc(axisx.p2c(x), axisy.p2c(y), radius, 0, 2 * Math.PI, true);
            octx.stroke();
        }

        function drawBarHighlight(series, point) {
            octx.lineJoin = "round";
            octx.lineWidth = series.bars.lineWidth;
            octx.strokeStyle = parseColor(series.color).scale(1, 1, 1, 0.5).toString();
            octx.fillStyle = parseColor(series.color).scale(1, 1, 1, 0.5).toString();
            var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2;
            drawBar(point[0], point[1], barLeft, barLeft + series.bars.barWidth,
                    0, true, series.xaxis, series.yaxis, octx);
        }
        
        function triggerSelectedEvent() {
            var x1 = Math.min(selection.first.x, selection.second.x),
                x2 = Math.max(selection.first.x, selection.second.x),
                y1 = Math.max(selection.first.y, selection.second.y),
                y2 = Math.min(selection.first.y, selection.second.y);

            var r = {};
            if (axes.xaxis.used)
                r.xaxis = { from: axes.xaxis.c2p(x1), to: axes.xaxis.c2p(x2) };
            if (axes.x2axis.used)
                r.x2axis = { from: axes.x2axis.c2p(x1), to: axes.x2axis.c2p(x2) };
            if (axes.yaxis.used)
                r.yaxis = { from: axes.yaxis.c2p(y1), to: axes.yaxis.c2p(y2) };
            if (axes.y2axis.used)
                r.yaxis = { from: axes.y2axis.c2p(y1), to: axes.y2axis.c2p(y2) };
            
            target.trigger("plotselected", [ r ]);

            if (axes.xaxis.used &amp;&amp; axes.yaxis.used)
                target.trigger("selected", [ { x1: r.xaxis.from, y1: r.yaxis.from, x2: r.xaxis.to, y2: r.yaxis.to } ]);
        }
        
        function onSelectionMouseUp(e) {
        
            if (document.onselectstart !== undefined)
                document.onselectstart = workarounds.onselectstart;
            if (document.ondrag !== undefined)
                document.ondrag = workarounds.ondrag;
            
       
            selection.active = false;
            updateSelection(e);
            
            if (selectionIsSane()) {
                triggerSelectedEvent();
                clickIsMouseUp = true;
            }
            
            return false;
        }

        function setSelectionPos(pos, e) {
            var offset = eventHolder.offset();
            if (options.selection.mode == "y") {
                if (pos == selection.first)
                    pos.x = 0;
                else
                    pos.x = plotWidth;
            }
            else {
                pos.x = e.pageX - offset.left - plotOffset.left;
                pos.x = Math.min(Math.max(0, pos.x), plotWidth);
            }

            if (options.selection.mode == "x") {
                if (pos == selection.first)
                    pos.y = 0;
                else
                    pos.y = plotHeight;
            }
            else {
                pos.y = e.pageY - offset.top - plotOffset.top;
                pos.y = Math.min(Math.max(0, pos.y), plotHeight);
            }
        }
        
        function updateSelection(pos) {
            if (pos.pageX == null)
                return;
            
            setSelectionPos(selection.second, pos);
            if (selectionIsSane()) {
                selection.show = true;
                triggerRedrawOverlay();
            }
            else
                clearSelection();
        }

        function clearSelection() {
            if (selection.show) {
                selection.show = false;
                triggerRedrawOverlay();
            }
        }

        function setSelection(ranges, preventEvent) {
            var range;
            
            if (options.selection.mode == "y") {
                selection.first.x = 0;
                selection.second.x = plotWidth;
            }
            else {
                range = extractRange(ranges, "x");
                
                selection.first.x = range.axis.p2c(range.from);
                selection.second.x = range.axis.p2c(range.to);
            }
            
            if (options.selection.mode == "x") {
                selection.first.y = 0;
                selection.second.y = plotHeight;
            }
            else {
                range = extractRange(ranges, "y");
                
                selection.first.y = range.axis.p2c(range.from);
                selection.second.y = range.axis.p2c(range.to);
            }

            selection.show = true;
            triggerRedrawOverlay();
            if (!preventEvent)
                triggerSelectedEvent();
        }
        
        function selectionIsSane() {
            var minSize = 5;
            return Math.abs(selection.second.x - selection.first.x) &gt;= minSize &amp;&amp;
                Math.abs(selection.second.y - selection.first.y) &gt;= minSize;
        }
    }
    
    $.plot = function(target, data, options) {
        var plot = new Plot(target, data, options);

        return plot;
    };
    

    function floorInBase(n, base) {
        return base * Math.floor(n / base);
    }
    
    function clamp(min, value, max) {
        if (value &lt; min)
            return value;
        else if (value &gt; max)
            return max;
        else
            return value;
    }
    

    function Color (r, g, b, a) {
       
        var rgba = ['r','g','b','a'];
        var x = 4; 
       
        while (-1&lt;--x) {
            this[rgba[x]] = arguments[x] || ((x==3) ? 1.0 : 0);
        }
       
        this.toString = function() {
            if (this.a &gt;= 1.0) {
                return "rgb("+[this.r,this.g,this.b].join(",")+")";
            } else {
                return "rgba("+[this.r,this.g,this.b,this.a].join(",")+")";
            }
        };

        this.scale = function(rf, gf, bf, af) {
            x = 4;
            while (-1&lt;--x) {
                if (arguments[x] != null)
                    this[rgba[x]] *= arguments[x];
            }
            return this.normalize();
        };

        this.adjust = function(rd, gd, bd, ad) {
            x = 4;
            while (-1&lt;--x) {
                if (arguments[x] != null)
                    this[rgba[x]] += arguments[x];
            }
            return this.normalize();
        };

        this.clone = function() {
            return new Color(this.r, this.b, this.g, this.a);
        };

        var limit = function(val,minVal,maxVal) {
            return Math.max(Math.min(val, maxVal), minVal);
        };

        this.normalize = function() {
            this.r = limit(parseInt(this.r), 0, 255);
            this.g = limit(parseInt(this.g), 0, 255);
            this.b = limit(parseInt(this.b), 0, 255);
            this.a = limit(this.a, 0, 1);
            return this;
        };

        this.normalize();
    }
    
    var lookupColors = {
        aqua:[0,255,255],
        azure:[240,255,255],
        beige:[245,245,220],
        black:[0,0,0],
        blue:[0,0,255],
        brown:[165,42,42],
        cyan:[0,255,255],
        darkblue:[0,0,139],
        darkcyan:[0,139,139],
        darkgrey:[169,169,169],
        darkgreen:[0,100,0],
        darkkhaki:[189,183,107],
        darkmagenta:[139,0,139],
        darkolivegreen:[85,107,47],
        darkorange:[255,140,0],
        darkorchid:[153,50,204],
        darkred:[139,0,0],
        darksalmon:[233,150,122],
        darkviolet:[148,0,211],
        fuchsia:[255,0,255],
        gold:[255,215,0],
        green:[0,128,0],
        indigo:[75,0,130],
        khaki:[240,230,140],
        lightblue:[173,216,230],
        lightcyan:[224,255,255],
        lightgreen:[144,238,144],
        lightgrey:[211,211,211],
        lightpink:[255,182,193],
        lightyellow:[255,255,224],
        lime:[0,255,0],
        magenta:[255,0,255],
        maroon:[128,0,0],
        navy:[0,0,128],
        olive:[128,128,0],
        orange:[255,165,0],
        pink:[255,192,203],
        purple:[128,0,128],
        violet:[128,0,128],
        red:[255,0,0],
        silver:[192,192,192],
        white:[255,255,255],
        yellow:[255,255,0]
    };    

    function extractColor(element) {
        var color, elem = element;
        do {
            color = elem.css("background-color").toLowerCase();
          
            if (color != '' &amp;&amp; color != 'transparent')
                break;
            elem = elem.parent();
        } while (!$.nodeName(elem.get(0), "body"));

    
        if (color == "rgba(0, 0, 0, 0)") 
            return "transparent";
        
        return color;
    }
    
    
    function parseColor(str) {
        var result;

     
        if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))
            return new Color(parseInt(result[1], 10), parseInt(result[2], 10), parseInt(result[3], 10));
        
       
        if (result = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))
            return new Color(parseInt(result[1], 10), parseInt(result[2], 10), parseInt(result[3], 10), parseFloat(result[4]));
        
        if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))
            return new Color(parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55);

      
        if (result = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))
            return new Color(parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55, parseFloat(result[4]));
        
        if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))
            return new Color(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16));

       
        if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))
            return new Color(parseInt(result[1]+result[1], 16), parseInt(result[2]+result[2], 16), parseInt(result[3]+result[3], 16));

        var name = $.trim(str).toLowerCase();
        if (name == "transparent")
            return new Color(255, 255, 255, 0);
        else {
            result = lookupColors[name];
            return new Color(result[0], result[1], result[2]);
        }
    }
        
})(jQuery);
//]]&gt;
&lt;/script&gt;

&lt;script id="source" language="javascript" type="text/javascript"&gt;
$(function () {
    var datasets = {"2006": {label: "2006",data: [[9072000000,12818],[9590400000,13063],[10108800000,13323],[10713600000,13763],[11404800000,14043],[11577600000,14273],[11923200000,14425],[12096000000,14786],[12528000000,15094],[13132800000,15538],[13824000000,16099],[14428800000,16430],[14947200000,16668],[15638400000,17042],[16329600000,17331],[16934400000,17686],[17539200000,18114],[18057600000,18716],[18748800000,18762],[19526400000,18901],[19958400000,18849],[20563200000,18756],[21168000000,18446],[21772800000,18606],[22377600000,18534],[22982400000,18647],[23587200000,18434],[24192000000,18326],[24796800000,18578],[25401600000,18550],[26006400000,18303],[26611200000,18125],[27216000000,17868],[27820800000,17792],[28339200000,17411],[29030400000,16817],[29635200000,16429],[30326400000,13303],[30844800000,12900],[31449600000,12438]]},"2007": {label: "2007",data: [[518400000,12113],[1123200000,12304],[1728000000,12482],[2332800000,12653],[2937600000,12821],[3456000000,12833],[4147200000,13049],[4752000000,13357],[5356800000,13280],[5961600000,13584],[6566400000,13712],[7171200000,14137],[7776000000,],[8380800000,],[8985600000,],[9676800000,],[10195200000,15812],[10886400000,15845],[11404800000,16126],[12009600000,16341],[12614400000,16628],[13219200000,16598],[13824000000,16799],[14428800000,17284],[15033600000,17525],[15638400000,17690],[16243200000,17333],[16848000000,17824],[17452800000,17789],[18057600000,17851],[18662400000,17748],[19267200000,18132],[19872000000,18246],[20476800000,18074],[21081600000,17995],[21686400000,17923],[22291200000,17957],[22896000000,17917],[23500800000,18110],[24105600000,17698],[24710400000,17676],[25315200000,17730],[25920000000,17523],[26524800000,17471],[27129600000,17383],[27734400000,17197],[28339200000,16672],[28944000000,16846],[29548800000,16199],[30153600000,16000],[30758400000,15840],[31363200000,15492]]},"2008": {label: "2008",data: [[432000000,14868],[1036800000,14873],[1641600000,14979],[2246400000,14928],[2851200000,15086],[3456000000,15134],[4060800000,15236],[4665600000,14974],[5270400000,14919],[5875200000,14835],[6220800000,14860],[6480000000,14977],[7084800000,15107],[7689600000,15897],[8294400000,15032],[8899200000,15006],[9504000000,15008],[10108800000,14945],[10713600000,14541],[11318400000,14527],[11923200000,14485],[12528000000,14486],[13132800000,14433],[13737600000,14277],[14342400000,14282],[14947200000,14362],[15552000000,14664],[16156800000,14100],[16761600000,14315],[17366400000,14515],[17971200000,14393],[18576000000,14230],[19180800000,14428],[19785600000,14368],[20390400000,14294],[20995200000,14266],[21600000000,14087],[22204800000,14009],[22809600000,13896],[23414400000,13935],[24019200000,13692],[24624000000,13804],[25228800000,13906],[25833600000,13892],[26438400000,13762],[27043200000,13478],[27648000000,13375],[28252800000,13144],[28857600000,12884],[29462400000,12655],[30067200000,12563],[30672000000,12360],[31276800000,12079]]},"2009": {label: "2009",data: [[259200000,11636],[864000000,11895],[1468800000,11806],[2073600000,11889],[2678400000,12002],[3283200000,11997],[3888000000,11923],[4492800000,11953],[5097600000,11839],[5702400000,11749],[6307200000,11677],[6912000000,11751],[7516800000,11728],[8121600000,11585],[8726400000,11400],[9331200000,11244],[9936000000,11009],[10540800000,11142],[11145600000,11037],[11750400000,10968],[12355200000,10999]]}
    };

    // hard-code color indices to prevent them from shifting as
    // countries are turned on/off
    var i = 0;
    $.each(datasets, function(key, val) {
        val.color = i;
        ++i;
    });
    
    // insert checkboxes 
    var choiceContainer = $("#choices");
choiceContainer.append('&lt;br/&gt;&lt;center&gt;');
    $.each(datasets, function(key, val) {
        choiceContainer.append(' &lt;input type="checkbox" name="' + key +
                               '" checked="checked" &gt;' + val.label + '&lt;/input&gt;');
    });
choiceContainer.append('&lt;/center&gt;');
    choiceContainer.find("input").click(plotAccordingToChoices);

    
    function plotAccordingToChoices() {
        var data = [];

        choiceContainer.find("input:checked").each(function () {
            var key = $(this).attr("name");
            if (key &amp;&amp; datasets[key])
                data.push(datasets[key]);
        });

        if (data.length &gt; 0)
            $.plot($("#placeholder"), data, {
                
                xaxis: {mode: "time",timeformat: "%b",minTickSize: [30, "day"]
}
            });
    }

    plotAccordingToChoices();
});
//]]&gt;&lt;/script&gt;
&lt;h1&gt;Four County Inventory Levels&lt;/h1&gt;
&lt;div id="placeholder" style="width:400px;height:400px;"&gt;&lt;/div&gt;

    &lt;p id="choices"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8585651-8509884205609396052?l=nitricacid.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nitricacid.blogspot.com/feeds/8509884205609396052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8585651&amp;postID=8509884205609396052&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/8509884205609396052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/8509884205609396052'/><link rel='alternate' type='text/html' href='http://nitricacid.blogspot.com/2009/05/flot-test-1.html' title='Flot Test 1'/><author><name>Max</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8585651.post-2838975355513495207</id><published>2009-05-17T17:29:00.000-07:00</published><updated>2009-05-17T17:36:44.041-07:00</updated><title type='text'>Flot Test 2</title><content type='html'>&lt;script language="javascript" type="text/javascript"&gt;
//&lt;![CDATA[
(function(){

if ( window.jQuery )
	var _jQuery = window.jQuery;

var jQuery = window.jQuery = function( selector, context ) {

	return new jQuery.prototype.init( selector, context );
};


if ( window.$ )
	var _$ = window.$;
	

window.$ = jQuery;


var quickExpr = /^[^&lt;]*(&lt;(.|\s)+&gt;)[^&gt;]*$|^#(\w+)$/;

var isSimple = /^.[^:#\[\.]*$/;

jQuery.fn = jQuery.prototype = {
	init: function( selector, context ) {
		
		selector = selector || document;

		
		if ( selector.nodeType ) {
			this[0] = selector;
			this.length = 1;
			return this;

	
		} else if ( typeof selector == "string" ) {
			
			var match = quickExpr.exec( selector );

			if ( match &amp;&amp; (match[1] || !context) ) {

				
				if ( match[1] )
					selector = jQuery.clean( [ match[1] ], context );

				
				else {
					var elem = document.getElementById( match[3] );

					
					if ( elem )
						
						if ( elem.id != match[3] )
							return jQuery().find( selector );

						
						else {
							this[0] = elem;
							this.length = 1;
							return this;
						}

					else
						selector = [];
				}

			} else
				return new jQuery( context ).find( selector );

	
		} else if ( jQuery.isFunction( selector ) )
			return new jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector );

		return this.setArray(
		
			selector.constructor == Array &amp;&amp; selector ||

			(selector.jquery || selector.length &amp;&amp; selector != window &amp;&amp; !selector.nodeType &amp;&amp; selector[0] != undefined &amp;&amp; selector[0].nodeType) &amp;&amp; jQuery.makeArray( selector ) ||

		
			[ selector ] );
	},
	

	jquery: "1.2.3",


	size: function() {
		return this.length;
	},
	
	
	length: 0,

	get: function( num ) {
		return num == undefined ?

		
			jQuery.makeArray( this ) :

			
			this[ num ];
	},
	

	pushStack: function( elems ) {
	
		var ret = jQuery( elems );

	
		ret.prevObject = this;

		return ret;
	},
	
	
	setArray: function( elems ) {
	
		this.length = 0;
		Array.prototype.push.apply( this, elems );
		
		return this;
	},


	each: function( callback, args ) {
		return jQuery.each( this, callback, args );
	},

	
	index: function( elem ) {
		var ret = -1;

		this.each(function(i){
			if ( this == elem )
				ret = i;
		});

		return ret;
	},

	attr: function( name, value, type ) {
		var options = name;
		
		
		if ( name.constructor == String )
			if ( value == undefined )
				return this.length &amp;&amp; jQuery[ type || "attr" ]( this[0], name ) || undefined;

			else {
				options = {};
				options[ name ] = value;
			}
		
		return this.each(function(i){
			
			for ( name in options )
				jQuery.attr(
					type ?
						this.style :
						this,
					name, jQuery.prop( this, options[ name ], type, i, name )
				);
		});
	},

	css: function( key, value ) {
		
		if ( (key == 'width' || key == 'height') &amp;&amp; parseFloat(value) &lt; 0 )
			value = undefined;
		return this.attr( key, value, "curCSS" );
	},

	text: function( text ) {
		if ( typeof text != "object" &amp;&amp; text != null )
			return this.empty().append( (this[0] &amp;&amp; this[0].ownerDocument || document).createTextNode( text ) );

		var ret = "";

		jQuery.each( text || this, function(){
			jQuery.each( this.childNodes, function(){
				if ( this.nodeType != 8 )
					ret += this.nodeType != 1 ?
						this.nodeValue :
						jQuery.fn.text( [ this ] );
			});
		});

		return ret;
	},

	wrapAll: function( html ) {
		if ( this[0] )
			
			jQuery( html, this[0].ownerDocument )
				.clone()
				.insertBefore( this[0] )
				.map(function(){
					var elem = this;

					while ( elem.firstChild )
						elem = elem.firstChild;

					return elem;
				})
				.append(this);

		return this;
	},

	wrapInner: function( html ) {
		return this.each(function(){
			jQuery( this ).contents().wrapAll( html );
		});
	},

	wrap: function( html ) {
		return this.each(function(){
			jQuery( this ).wrapAll( html );
		});
	},

	append: function() {
		return this.domManip(arguments, true, false, function(elem){
			if (this.nodeType == 1)
				this.appendChild( elem );
		});
	},

	prepend: function() {
		return this.domManip(arguments, true, true, function(elem){
			if (this.nodeType == 1)
				this.insertBefore( elem, this.firstChild );
		});
	},
	
	before: function() {
		return this.domManip(arguments, false, false, function(elem){
			this.parentNode.insertBefore( elem, this );
		});
	},

	after: function() {
		return this.domManip(arguments, false, true, function(elem){
			this.parentNode.insertBefore( elem, this.nextSibling );
		});
	},

	end: function() {
		return this.prevObject || jQuery( [] );
	},

	find: function( selector ) {
		var elems = jQuery.map(this, function(elem){
			return jQuery.find( selector, elem );
		});

		return this.pushStack( /[^+&gt;] [^+&gt;]/.test( selector ) || selector.indexOf("..") &gt; -1 ?
			jQuery.unique( elems ) :
			elems );
	},

	clone: function( events ) {
		
		var ret = this.map(function(){
			if ( jQuery.browser.msie &amp;&amp; !jQuery.isXMLDoc(this) ) {
			
				var clone = this.cloneNode(true),
					container = document.createElement("div");
				container.appendChild(clone);
				return jQuery.clean([container.innerHTML])[0];
			} else
				return this.cloneNode(true);
		});

		var clone = ret.find("*").andSelf().each(function(){
			if ( this[ expando ] != undefined )
				this[ expando ] = null;
		});
		
		
		if ( events === true )
			this.find("*").andSelf().each(function(i){
				if (this.nodeType == 3)
					return;
				var events = jQuery.data( this, "events" );

				for ( var type in events )
					for ( var handler in events[ type ] )
						jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data );
			});

		
		return ret;
	},

	filter: function( selector ) {
		return this.pushStack(
			jQuery.isFunction( selector ) &amp;&amp;
			jQuery.grep(this, function(elem, i){
				return selector.call( elem, i );
			}) ||

			jQuery.multiFilter( selector, this ) );
	},

	not: function( selector ) {
		if ( selector.constructor == String )
			
			if ( isSimple.test( selector ) )
				return this.pushStack( jQuery.multiFilter( selector, this, true ) );
			else
				selector = jQuery.multiFilter( selector, this );

		var isArrayLike = selector.length &amp;&amp; selector[selector.length - 1] !== undefined &amp;&amp; !selector.nodeType;
		return this.filter(function() {
			return isArrayLike ? jQuery.inArray( this, selector ) &lt; 0 : this != selector;
		});
	},

	add: function( selector ) {
		return !selector ? this : this.pushStack( jQuery.merge( 
			this.get(),
			selector.constructor == String ? 
				jQuery( selector ).get() :
				selector.length != undefined &amp;&amp; (!selector.nodeName || jQuery.nodeName(selector, "form")) ?
					selector : [selector] ) );
	},

	is: function( selector ) {
		return selector ?
			jQuery.multiFilter( selector, this ).length &gt; 0 :
			false;
	},

	hasClass: function( selector ) {
		return this.is( "." + selector );
	},
	
	val: function( value ) {
		if ( value == undefined ) {

			if ( this.length ) {
				var elem = this[0];

				
				if ( jQuery.nodeName( elem, "select" ) ) {
					var index = elem.selectedIndex,
						values = [],
						options = elem.options,
						one = elem.type == "select-one";
					
					
					if ( index &lt; 0 )
						return null;

					
					for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i &lt; max; i++ ) {
						var option = options[ i ];

						if ( option.selected ) {
							
							value = jQuery.browser.msie &amp;&amp; !option.attributes.value.specified ? option.text : option.value;
							
						
							if ( one )
								return value;
							
							
							values.push( value );
						}
					}
					
					return values;
					
				
				} else
					return (this[0].value || "").replace(/\r/g, "");

			}

			return undefined;
		}

		return this.each(function(){
			if ( this.nodeType != 1 )
				return;

			if ( value.constructor == Array &amp;&amp; /radio|checkbox/.test( this.type ) )
				this.checked = (jQuery.inArray(this.value, value) &gt;= 0 ||
					jQuery.inArray(this.name, value) &gt;= 0);

			else if ( jQuery.nodeName( this, "select" ) ) {
				var values = value.constructor == Array ?
					value :
					[ value ];

				jQuery( "option", this ).each(function(){
					this.selected = (jQuery.inArray( this.value, values ) &gt;= 0 ||
						jQuery.inArray( this.text, values ) &gt;= 0);
				});

				if ( !values.length )
					this.selectedIndex = -1;

			} else
				this.value = value;
		});
	},
	
	html: function( value ) {
		return value == undefined ?
			(this.length ?
				this[0].innerHTML :
				null) :
			this.empty().append( value );
	},

	replaceWith: function( value ) {
		return this.after( value ).remove();
	},

	eq: function( i ) {
		return this.slice( i, i + 1 );
	},

	slice: function() {
		return this.pushStack( Array.prototype.slice.apply( this, arguments ) );
	},

	map: function( callback ) {
		return this.pushStack( jQuery.map(this, function(elem, i){
			return callback.call( elem, i, elem );
		}));
	},

	andSelf: function() {
		return this.add( this.prevObject );
	},

	data: function( key, value ){
		var parts = key.split(".");
		parts[1] = parts[1] ? "." + parts[1] : "";

		if ( value == null ) {
			var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
			
			if ( data == undefined &amp;&amp; this.length )
				data = jQuery.data( this[0], key );

			return data == null &amp;&amp; parts[1] ?
				this.data( parts[0] ) :
				data;
		} else
			return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
				jQuery.data( this, key, value );
			});
	},

	removeData: function( key ){
		return this.each(function(){
			jQuery.removeData( this, key );
		});
	},
	
	domManip: function( args, table, reverse, callback ) {
		var clone = this.length &gt; 1, elems; 

		return this.each(function(){
			if ( !elems ) {
				elems = jQuery.clean( args, this.ownerDocument );

				if ( reverse )
					elems.reverse();
			}

			var obj = this;

			if ( table &amp;&amp; jQuery.nodeName( this, "table" ) &amp;&amp; jQuery.nodeName( elems[0], "tr" ) )
				obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") );

			var scripts = jQuery( [] );

			jQuery.each(elems, function(){
				var elem = clone ?
					jQuery( this ).clone( true )[0] :
					this;

			
				if ( jQuery.nodeName( elem, "script" ) ) {
					scripts = scripts.add( elem );
				} else {
				
					if ( elem.nodeType == 1 )
						scripts = scripts.add( jQuery( "script", elem ).remove() );

					
					callback.call( obj, elem );
				}
			});

			scripts.each( evalScript );
		});
	}
};


jQuery.prototype.init.prototype = jQuery.prototype;

function evalScript( i, elem ) {
	if ( elem.src )
		jQuery.ajax({
			url: elem.src,
			async: false,
			dataType: "script"
		});

	else
		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );

	if ( elem.parentNode )
		elem.parentNode.removeChild( elem );
}

jQuery.extend = jQuery.fn.extend = function() {
	
	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;

	
	if ( target.constructor == Boolean ) {
		deep = target;
		target = arguments[1] || {};
		
		i = 2;
	}


	if ( typeof target != "object" &amp;&amp; typeof target != "function" )
		target = {};

	
	if ( length == 1 ) {
		target = this;
		i = 0;
	}

	for ( ; i &lt; length; i++ )
		
		if ( (options = arguments[ i ]) != null )
			
			for ( var name in options ) {
				
				if ( target === options[ name ] )
					continue;

				
				if ( deep &amp;&amp; options[ name ] &amp;&amp; typeof options[ name ] == "object" &amp;&amp; target[ name ] &amp;&amp; !options[ name ].nodeType )
					target[ name ] = jQuery.extend( target[ name ], options[ name ] );

				
				else if ( options[ name ] != undefined )
					target[ name ] = options[ name ];

			}

	
	return target;
};

var expando = "jQuery" + (new Date()).getTime(), uuid = 0, windowData = {};


var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i;

jQuery.extend({
	noConflict: function( deep ) {
		window.$ = _$;

		if ( deep )
			window.jQuery = _jQuery;

		return jQuery;
	},

	
	isFunction: function( fn ) {
		return !!fn &amp;&amp; typeof fn != "string" &amp;&amp; !fn.nodeName &amp;&amp; 
			fn.constructor != Array &amp;&amp; /function/i.test( fn + "" );
	},
	
	
	isXMLDoc: function( elem ) {
		return elem.documentElement &amp;&amp; !elem.body ||
			elem.tagName &amp;&amp; elem.ownerDocument &amp;&amp; !elem.ownerDocument.body;
	},


	globalEval: function( data ) {
		data = jQuery.trim( data );

		if ( data ) {
			
			var head = document.getElementsByTagName("head")[0] || document.documentElement,
				script = document.createElement("script");

			script.type = "text/javascript";
			if ( jQuery.browser.msie )
				script.text = data;
			else
				script.appendChild( document.createTextNode( data ) );

			head.appendChild( script );
			head.removeChild( script );
		}
	},

	nodeName: function( elem, name ) {
		return elem.nodeName &amp;&amp; elem.nodeName.toUpperCase() == name.toUpperCase();
	},
	
	cache: {},
	
	data: function( elem, name, data ) {
		elem = elem == window ?
			windowData :
			elem;

		var id = elem[ expando ];

		
		if ( !id ) 
			id = elem[ expando ] = ++uuid;

	
		if ( name &amp;&amp; !jQuery.cache[ id ] )
			jQuery.cache[ id ] = {};
		
		
		if ( data != undefined )
			jQuery.cache[ id ][ name ] = data;
		
	
		return name ?
			jQuery.cache[ id ][ name ] :
			id;
	},
	
	removeData: function( elem, name ) {
		elem = elem == window ?
			windowData :
			elem;

		var id = elem[ expando ];

	
		if ( name ) {
			if ( jQuery.cache[ id ] ) {
			
				delete jQuery.cache[ id ][ name ];

				name = "";

				for ( name in jQuery.cache[ id ] )
					break;

				if ( !name )
					jQuery.removeData( elem );
			}

		
		} else {
			
			try {
				delete elem[ expando ];
			} catch(e){
				
				if ( elem.removeAttribute )
					elem.removeAttribute( expando );
			}

			
			delete jQuery.cache[ id ];
		}
	},

	
	each: function( object, callback, args ) {
		if ( args ) {
			if ( object.length == undefined ) {
				for ( var name in object )
					if ( callback.apply( object[ name ], args ) === false )
						break;
			} else
				for ( var i = 0, length = object.length; i &lt; length; i++ )
					if ( callback.apply( object[ i ], args ) === false )
						break;

		} else {
			if ( object.length == undefined ) {
				for ( var name in object )
					if ( callback.call( object[ name ], name, object[ name ] ) === false )
						break;
			} else
				for ( var i = 0, length = object.length, value = object[0]; 
					i &lt; length &amp;&amp; callback.call( value, i, value ) !== false; value = object[++i] ){}
		}

		return object;
	},
	
	prop: function( elem, value, type, i, name ) {
			
			if ( jQuery.isFunction( value ) )
				value = value.call( elem, i );
				
			
			return value &amp;&amp; value.constructor == Number &amp;&amp; type == "curCSS" &amp;&amp; !exclude.test( name ) ?
				value + "px" :
				value;
	},

	className: {
		
		add: function( elem, classNames ) {
			jQuery.each((classNames || "").split(/\s+/), function(i, className){
				if ( elem.nodeType == 1 &amp;&amp; !jQuery.className.has( elem.className, className ) )
					elem.className += (elem.className ? " " : "") + className;
			});
		},

		
		remove: function( elem, classNames ) {
			if (elem.nodeType == 1)
				elem.className = classNames != undefined ?
					jQuery.grep(elem.className.split(/\s+/), function(className){
						return !jQuery.className.has( classNames, className );	
					}).join(" ") :
					"";
		},

		
		has: function( elem, className ) {
			return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) &gt; -1;
		}
	},

	
	swap: function( elem, options, callback ) {
		var old = {};
		
		for ( var name in options ) {
			old[ name ] = elem.style[ name ];
			elem.style[ name ] = options[ name ];
		}

		callback.call( elem );

		for ( var name in options )
			elem.style[ name ] = old[ name ];
	},

	css: function( elem, name, force ) {
		if ( name == "width" || name == "height" ) {
			var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
		
			function getWH() {
				val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
				var padding = 0, border = 0;
				jQuery.each( which, function() {
					padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
					border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
				});
				val -= Math.round(padding + border);
			}
		
			if ( jQuery(elem).is(":visible") )
				getWH();
			else
				jQuery.swap( elem, props, getWH );
			
			return Math.max(0, val);
		}
		
		return jQuery.curCSS( elem, name, force );
	},

	curCSS: function( elem, name, force ) {
		var ret;

		
		function color( elem ) {
			if ( !jQuery.browser.safari )
				return false;

			var ret = document.defaultView.getComputedStyle( elem, null );
			return !ret || ret.getPropertyValue("color") == "";
		}

	
		if ( name == "opacity" &amp;&amp; jQuery.browser.msie ) {
			ret = jQuery.attr( elem.style, "opacity" );

			return ret == "" ?
				"1" :
				ret;
		}
		
		if ( jQuery.browser.opera &amp;&amp; name == "display" ) {
			var save = elem.style.outline;
			elem.style.outline = "0 solid black";
			elem.style.outline = save;
		}
		
		
		if ( name.match( /float/i ) )
			name = styleFloat;

		if ( !force &amp;&amp; elem.style &amp;&amp; elem.style[ name ] )
			ret = elem.style[ name ];

		else if ( document.defaultView &amp;&amp; document.defaultView.getComputedStyle ) {

			if ( name.match( /float/i ) )
				name = "float";

			name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();

			var getComputedStyle = document.defaultView.getComputedStyle( elem, null );

			if ( getComputedStyle &amp;&amp; !color( elem ) )
				ret = getComputedStyle.getPropertyValue( name );

			
			else {
				var swap = [], stack = [];

				
				for ( var a = elem; a &amp;&amp; color(a); a = a.parentNode )
					stack.unshift(a);

				
				for ( var i = 0; i &lt; stack.length; i++ )
					if ( color( stack[ i ] ) ) {
						swap[ i ] = stack[ i ].style.display;
						stack[ i ].style.display = "block";
					}

				
				ret = name == "display" &amp;&amp; swap[ stack.length - 1 ] != null ?
					"none" :
					( getComputedStyle &amp;&amp; getComputedStyle.getPropertyValue( name ) ) || "";

				for ( var i = 0; i &lt; swap.length; i++ )
					if ( swap[ i ] != null )
						stack[ i ].style.display = swap[ i ];
			}

			if ( name == "opacity" &amp;&amp; ret == "" )
				ret = "1";

		} else if ( elem.currentStyle ) {
			var camelCase = name.replace(/\-(\w)/g, function(all, letter){
				return letter.toUpperCase();
			});

			ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];

		
			if ( !/^\d+(px)?$/i.test( ret ) &amp;&amp; /^\d/.test( ret ) ) {
				
				var style = elem.style.left, runtimeStyle = elem.runtimeStyle.left;

				
				elem.runtimeStyle.left = elem.currentStyle.left;
				elem.style.left = ret || 0;
				ret = elem.style.pixelLeft + "px";

				
				elem.style.left = style;
				elem.runtimeStyle.left = runtimeStyle;
			}
		}

		return ret;
	},
	
	clean: function( elems, context ) {
		var ret = [];
		context = context || document;
		
		if (typeof context.createElement == 'undefined') 
			context = context.ownerDocument || context[0] &amp;&amp; context[0].ownerDocument || document;

		jQuery.each(elems, function(i, elem){
			if ( !elem )
				return;

			if ( elem.constructor == Number )
				elem = elem.toString();
			
			
			if ( typeof elem == "string" ) {
			
				elem = elem.replace(/(&lt;(\w+)[^&gt;]*?)\/&gt;/g, function(all, front, tag){
					return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
						all :
						front + "&gt;&lt;/" + tag + "&gt;";
				});

				
				var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div");

				var wrap =
					
					!tags.indexOf("&lt;opt") &amp;&amp;
					[ 1, "&lt;select multiple='multiple'&gt;", "&lt;/select&gt;" ] ||
					
					!tags.indexOf("&lt;leg") &amp;&amp;
					[ 1, "&lt;fieldset&gt;", "&lt;/fieldset&gt;" ] ||
					
					tags.match(/^&lt;(thead|tbody|tfoot|colg|cap)/) &amp;&amp;
					[ 1, "&lt;table&gt;", "&lt;/table&gt;" ] ||
					
					!tags.indexOf("&lt;tr") &amp;&amp;
					[ 2, "&lt;table&gt;&lt;tbody&gt;", "&lt;/tbody&gt;&lt;/table&gt;" ] ||
					
				
					(!tags.indexOf("&lt;td") || !tags.indexOf("&lt;th")) &amp;&amp;
					[ 3, "&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;", "&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;" ] ||
					
					!tags.indexOf("&lt;col") &amp;&amp;
					[ 2, "&lt;table&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;colgroup&gt;", "&lt;/colgroup&gt;&lt;/table&gt;" ] ||

					
					jQuery.browser.msie &amp;&amp;
					[ 1, "div&lt;div&gt;", "&lt;/div&gt;" ] ||
					
					[ 0, "", "" ];

				
				div.innerHTML = wrap[1] + elem + wrap[2];
				
				while ( wrap[0]-- )
					div = div.lastChild;
				
				
				if ( jQuery.browser.msie ) {
					
					
					var tbody = !tags.indexOf("&lt;table") &amp;&amp; tags.indexOf("&lt;tbody") &lt; 0 ?
						div.firstChild &amp;&amp; div.firstChild.childNodes :
						
						wrap[1] == "&lt;table&gt;" &amp;&amp; tags.indexOf("&lt;tbody") &lt; 0 ?
							div.childNodes :
							[];
				
					for ( var j = tbody.length - 1; j &gt;= 0 ; --j )
						if ( jQuery.nodeName( tbody[ j ], "tbody" ) &amp;&amp; !tbody[ j ].childNodes.length )
							tbody[ j ].parentNode.removeChild( tbody[ j ] );
					
					if ( /^\s/.test( elem ) )	
						div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
				
				}
				
				elem = jQuery.makeArray( div.childNodes );
			}

			if ( elem.length === 0 &amp;&amp; (!jQuery.nodeName( elem, "form" ) &amp;&amp; !jQuery.nodeName( elem, "select" )) )
				return;

			if ( elem[0] == undefined || jQuery.nodeName( elem, "form" ) || elem.options )
				ret.push( elem );

			else
				ret = jQuery.merge( ret, elem );

		});

		return ret;
	},
	
	attr: function( elem, name, value ) {

		if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
			return undefined;

		var fix = jQuery.isXMLDoc( elem ) ?
			{} :
			jQuery.props;


		if ( name == "selected" &amp;&amp; jQuery.browser.safari )
			elem.parentNode.selectedIndex;
		

		if ( fix[ name ] ) {
			if ( value != undefined )
				elem[ fix[ name ] ] = value;

			return elem[ fix[ name ] ];

		} else if ( jQuery.browser.msie &amp;&amp; name == "style" )
			return jQuery.attr( elem.style, "cssText", value );

		else if ( value == undefined &amp;&amp; jQuery.browser.msie &amp;&amp; jQuery.nodeName( elem, "form" ) &amp;&amp; (name == "action" || name == "method") )
			return elem.getAttributeNode( name ).nodeValue;


		else if ( elem.tagName ) {

			if ( value != undefined ) {

				if ( name == "type" &amp;&amp; jQuery.nodeName( elem, "input" ) &amp;&amp; elem.parentNode )
					throw "type property can't be changed";

				elem.setAttribute( name, "" + value );
			}

			if ( jQuery.browser.msie &amp;&amp; /href|src/.test( name ) &amp;&amp; !jQuery.isXMLDoc( elem ) ) 
				return elem.getAttribute( name, 2 );

			return elem.getAttribute( name );

		} else {

			if ( name == "opacity" &amp;&amp; jQuery.browser.msie ) {
				if ( value != undefined ) {

			
					elem.zoom = 1; 
	
					
					elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
						(parseFloat( value ).toString() == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
				}
	
				return elem.filter &amp;&amp; elem.filter.indexOf("opacity=") &gt;= 0 ?
					(parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100).toString() :
					"";
			}

			name = name.replace(/-([a-z])/ig, function(all, letter){
				return letter.toUpperCase();
			});

			if ( value != undefined )
				elem[ name ] = value;

			return elem[ name ];
		}
	},
	
	trim: function( text ) {
		return (text || "").replace( /^\s+|\s+$/g, "" );
	},

	makeArray: function( array ) {
		var ret = [];

		
		if ( typeof array != "array" )
			for ( var i = 0, length = array.length; i &lt; length; i++ )
				ret.push( array[ i ] );
		else
			ret = array.slice( 0 );

		return ret;
	},

	inArray: function( elem, array ) {
		for ( var i = 0, length = array.length; i &lt; length; i++ )
			if ( array[ i ] == elem )
				return i;

		return -1;
	},

	merge: function( first, second ) {

		if ( jQuery.browser.msie ) {
			for ( var i = 0; second[ i ]; i++ )
				if ( second[ i ].nodeType != 8 )
					first.push( second[ i ] );

		} else
			for ( var i = 0; second[ i ]; i++ )
				first.push( second[ i ] );

		return first;
	},

	unique: function( array ) {
		var ret = [], done = {};

		try {

			for ( var i = 0, length = array.length; i &lt; length; i++ ) {
				var id = jQuery.data( array[ i ] );

				if ( !done[ id ] ) {
					done[ id ] = true;
					ret.push( array[ i ] );
				}
			}

		} catch( e ) {
			ret = array;
		}

		return ret;
	},

	grep: function( elems, callback, inv ) {
		var ret = [];

		
		for ( var i = 0, length = elems.length; i &lt; length; i++ )
			if ( !inv &amp;&amp; callback( elems[ i ], i ) || inv &amp;&amp; !callback( elems[ i ], i ) )
				ret.push( elems[ i ] );

		return ret;
	},

	map: function( elems, callback ) {
		var ret = [];

	
		for ( var i = 0, length = elems.length; i &lt; length; i++ ) {
			var value = callback( elems[ i ], i );

			if ( value !== null &amp;&amp; value != undefined ) {
				if ( value.constructor != Array )
					value = [ value ];

				ret = ret.concat( value );
			}
		}

		return ret;
	}
});

var userAgent = navigator.userAgent.toLowerCase();


jQuery.browser = {
	version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
	safari: /webkit/.test( userAgent ),
	opera: /opera/.test( userAgent ),
	msie: /msie/.test( userAgent ) &amp;&amp; !/opera/.test( userAgent ),
	mozilla: /mozilla/.test( userAgent ) &amp;&amp; !/(compatible|webkit)/.test( userAgent )
};

var styleFloat = jQuery.browser.msie ?
	"styleFloat" :
	"cssFloat";
	
jQuery.extend({

	boxModel: !jQuery.browser.msie || document.compatMode == "CSS1Compat",
	
	props: {
		"for": "htmlFor",
		"class": "className",
		"float": styleFloat,
		cssFloat: styleFloat,
		styleFloat: styleFloat,
		innerHTML: "innerHTML",
		className: "className",
		value: "value",
		disabled: "disabled",
		checked: "checked",
		readonly: "readOnly",
		selected: "selected",
		maxlength: "maxLength",
		selectedIndex: "selectedIndex",
		defaultValue: "defaultValue",
		tagName: "tagName",
		nodeName: "nodeName"
	}
});

jQuery.each({
	parent: function(elem){return elem.parentNode;},
	parents: function(elem){return jQuery.dir(elem,"parentNode");},
	next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
	prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
	nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
	prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
	siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
	children: function(elem){return jQuery.sibling(elem.firstChild);},
	contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
}, function(name, fn){
	jQuery.fn[ name ] = function( selector ) {
		var ret = jQuery.map( this, fn );

		if ( selector &amp;&amp; typeof selector == "string" )
			ret = jQuery.multiFilter( selector, ret );

		return this.pushStack( jQuery.unique( ret ) );
	};
});

jQuery.each({
	appendTo: "append",
	prependTo: "prepend",
	insertBefore: "before",
	insertAfter: "after",
	replaceAll: "replaceWith"
}, function(name, original){
	jQuery.fn[ name ] = function() {
		var args = arguments;

		return this.each(function(){
			for ( var i = 0, length = args.length; i &lt; length; i++ )
				jQuery( args[ i ] )[ original ]( this );
		});
	};
});

jQuery.each({
	removeAttr: function( name ) {
		jQuery.attr( this, name, "" );
		if (this.nodeType == 1) 
			this.removeAttribute( name );
	},

	addClass: function( classNames ) {
		jQuery.className.add( this, classNames );
	},

	removeClass: function( classNames ) {
		jQuery.className.remove( this, classNames );
	},

	toggleClass: function( classNames ) {
		jQuery.className[ jQuery.className.has( this, classNames ) ? "remove" : "add" ]( this, classNames );
	},

	remove: function( selector ) {
		if ( !selector || jQuery.filter( selector, [ this ] ).r.length ) {
		
			jQuery( "*", this ).add(this).each(function(){
				jQuery.event.remove(this);
				jQuery.removeData(this);
			});
			if (this.parentNode)
				this.parentNode.removeChild( this );
		}
	},

	empty: function() {
	
		jQuery( "&gt;*", this ).remove();
	
		while ( this.firstChild )
			this.removeChild( this.firstChild );
	}
}, function(name, fn){
	jQuery.fn[ name ] = function(){
		return this.each( fn, arguments );
	};
});

jQuery.each([ "Height", "Width" ], function(i, name){
	var type = name.toLowerCase();
	
	jQuery.fn[ type ] = function( size ) {
	
		return this[0] == window ?
		
			jQuery.browser.opera &amp;&amp; document.body[ "client" + name ] || 
			
			
			jQuery.browser.safari &amp;&amp; window[ "inner" + name ] ||
			
			
			document.compatMode == "CSS1Compat" &amp;&amp; document.documentElement[ "client" + name ] || document.body[ "client" + name ] :
		
			
			this[0] == document ?
				
				Math.max( 
					Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]), 
					Math.max(document.body["offset" + name], document.documentElement["offset" + name]) 
				) :

				
				size == undefined ?
					
					(this.length ? jQuery.css( this[0], type ) : null) :

					
					this.css( type, size.constructor == String ? size : size + "px" );
	};
});

var chars = jQuery.browser.safari &amp;&amp; parseInt(jQuery.browser.version) &lt; 417 ?
		"(?:[\\w*_-]|\\\\.)" :
		"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",
	quickChild = new RegExp("^&gt;\\s*(" + chars + "+)"),
	quickID = new RegExp("^(" + chars + "+)(#)(" + chars + "+)"),
	quickClass = new RegExp("^([#.]?)(" + chars + "*)");

jQuery.extend({
	expr: {
		"": function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},
		"#": function(a,i,m){return a.getAttribute("id")==m[2];},
		":": {
			
			lt: function(a,i,m){return i&lt;m[3]-0;},
			gt: function(a,i,m){return i&gt;m[3]-0;},
			nth: function(a,i,m){return m[3]-0==i;},
			eq: function(a,i,m){return m[3]-0==i;},
			first: function(a,i){return i==0;},
			last: function(a,i,m,r){return i==r.length-1;},
			even: function(a,i){return i%2==0;},
			odd: function(a,i){return i%2;},

			
			"first-child": function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},
			"last-child": function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},
			"only-child": function(a){return !jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},

			
			parent: function(a){return a.firstChild;},
			empty: function(a){return !a.firstChild;},

			
			contains: function(a,i,m){return (a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])&gt;=0;},

			
			visible: function(a){return "hidden"!=a.type&amp;&amp;jQuery.css(a,"display")!="none"&amp;&amp;jQuery.css(a,"visibility")!="hidden";},
			hidden: function(a){return "hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},

			
			enabled: function(a){return !a.disabled;},
			disabled: function(a){return a.disabled;},
			checked: function(a){return a.checked;},
			selected: function(a){return a.selected||jQuery.attr(a,"selected");},

			
			text: function(a){return "text"==a.type;},
			radio: function(a){return "radio"==a.type;},
			checkbox: function(a){return "checkbox"==a.type;},
			file: function(a){return "file"==a.type;},
			password: function(a){return "password"==a.type;},
			submit: function(a){return "submit"==a.type;},
			image: function(a){return "image"==a.type;},
			reset: function(a){return "reset"==a.type;},
			button: function(a){return "button"==a.type||jQuery.nodeName(a,"button");},
			input: function(a){return /input|select|textarea|button/i.test(a.nodeName);},

			
			has: function(a,i,m){return jQuery.find(m[3],a).length;},

			
			header: function(a){return /h\d/i.test(a.nodeName);},

			
			animated: function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}
		}
	},
	
	
	parse: [
		
		/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,

		
		/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,

		
		new RegExp("^([:.#]*)(" + chars + "+)")
	],

	multiFilter: function( expr, elems, not ) {
		var old, cur = [];

		while ( expr &amp;&amp; expr != old ) {
			old = expr;
			var f = jQuery.filter( expr, elems, not );
			expr = f.t.replace(/^\s*,\s*/, "" );
			cur = not ? elems = f.r : jQuery.merge( cur, f.r );
		}

		return cur;
	},

	find: function( t, context ) {
		
		if ( typeof t != "string" )
			return [ t ];

		
		if ( context &amp;&amp; context.nodeType != 1 &amp;&amp; context.nodeType != 9)
			return [ ];

		
		context = context || document;

	
		var ret = [context], done = [], last, nodeName;

		
		while ( t &amp;&amp; last != t ) {
			var r = [];
			last = t;

			t = jQuery.trim(t);

			var foundToken = false;

		
			var re = quickChild;
			var m = re.exec(t);

			if ( m ) {
				nodeName = m[1].toUpperCase();

				
				for ( var i = 0; ret[i]; i++ )
					for ( var c = ret[i].firstChild; c; c = c.nextSibling )
						if ( c.nodeType == 1 &amp;&amp; (nodeName == "*" || c.nodeName.toUpperCase() == nodeName) )
							r.push( c );

				ret = r;
				t = t.replace( re, "" );
				if ( t.indexOf(" ") == 0 ) continue;
				foundToken = true;
			} else {
				re = /^([&gt;+~])\s*(\w*)/i;

				if ( (m = re.exec(t)) != null ) {
					r = [];

					var merge = {};
					nodeName = m[2].toUpperCase();
					m = m[1];

					for ( var j = 0, rl = ret.length; j &lt; rl; j++ ) {
						var n = m == "~" || m == "+" ? ret[j].nextSibling : ret[j].firstChild;
						for ( ; n; n = n.nextSibling )
							if ( n.nodeType == 1 ) {
								var id = jQuery.data(n);

								if ( m == "~" &amp;&amp; merge[id] ) break;
								
								if (!nodeName || n.nodeName.toUpperCase() == nodeName ) {
									if ( m == "~" ) merge[id] = true;
									r.push( n );
								}
								
								if ( m == "+" ) break;
							}
					}

					ret = r;

					
					t = jQuery.trim( t.replace( re, "" ) );
					foundToken = true;
				}
			}

		
			if ( t &amp;&amp; !foundToken ) {
				
				if ( !t.indexOf(",") ) {
					
					if ( context == ret[0] ) ret.shift();

					
					done = jQuery.merge( done, ret );

				
					r = ret = [context];

					
					t = " " + t.substr(1,t.length);

				} else {
				
					var re2 = quickID;
					var m = re2.exec(t);
					
					
					if ( m ) {
						m = [ 0, m[2], m[3], m[1] ];

					} else {
						
						re2 = quickClass;
						m = re2.exec(t);
					}

					m[2] = m[2].replace(/\\/g, "");

					var elem = ret[ret.length-1];

					
					if ( m[1] == "#" &amp;&amp; elem &amp;&amp; elem.getElementById &amp;&amp; !jQuery.isXMLDoc(elem) ) {
					
						var oid = elem.getElementById(m[2]);
						
						if ( (jQuery.browser.msie||jQuery.browser.opera) &amp;&amp; oid &amp;&amp; typeof oid.id == "string" &amp;&amp; oid.id != m[2] )
							oid = jQuery('[@id="'+m[2]+'"]', elem)[0];

						
						ret = r = oid &amp;&amp; (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] : [];
					} else {
						
						for ( var i = 0; ret[i]; i++ ) {
							
							var tag = m[1] == "#" &amp;&amp; m[3] ? m[3] : m[1] != "" || m[0] == "" ? "*" : m[2];

							
							if ( tag == "*" &amp;&amp; ret[i].nodeName.toLowerCase() == "object" )
								tag = "param";

							r = jQuery.merge( r, ret[i].getElementsByTagName( tag ));
						}

						
						if ( m[1] == "." )
							r = jQuery.classFilter( r, m[2] );

						
						if ( m[1] == "#" ) {
							var tmp = [];

							
							for ( var i = 0; r[i]; i++ )
								if ( r[i].getAttribute("id") == m[2] ) {
									tmp = [ r[i] ];
									break;
								}

							r = tmp;
						}

						ret = r;
					}

					t = t.replace( re2, "" );
				}

			}

			
			if ( t ) {
				
				var val = jQuery.filter(t,r);
				ret = r = val.r;
				t = jQuery.trim(val.t);
			}
		}

		
		if ( t )
			ret = [];

		if ( ret &amp;&amp; context == ret[0] )
			ret.shift();

		
		done = jQuery.merge( done, ret );

		return done;
	},

	classFilter: function(r,m,not){
		m = " " + m + " ";
		var tmp = [];
		for ( var i = 0; r[i]; i++ ) {
			var pass = (" " + r[i].className + " ").indexOf( m ) &gt;= 0;
			if ( !not &amp;&amp; pass || not &amp;&amp; !pass )
				tmp.push( r[i] );
		}
		return tmp;
	},

	filter: function(t,r,not) {
		var last;

	
		while ( t &amp;&amp; t != last ) {
			last = t;

			var p = jQuery.parse, m;

			for ( var i = 0; p[i]; i++ ) {
				m = p[i].exec( t );

				if ( m ) {
					
					t = t.substring( m[0].length );

					m[2] = m[2].replace(/\\/g, "");
					break;
				}
			}

			if ( !m )
				break;

		
			if ( m[1] == ":" &amp;&amp; m[2] == "not" )
				
				r = isSimple.test( m[3] ) ?
					jQuery.filter(m[3], r, true).r :
					jQuery( r ).not( m[3] );

			
			else if ( m[1] == "." )
				r = jQuery.classFilter(r, m[2], not);

			else if ( m[1] == "[" ) {
				var tmp = [], type = m[3];
				
				for ( var i = 0, rl = r.length; i &lt; rl; i++ ) {
					var a = r[i], z = a[ jQuery.props[m[2]] || m[2] ];
					
					if ( z == null || /href|src|selected/.test(m[2]) )
						z = jQuery.attr(a,m[2]) || '';

					if ( (type == "" &amp;&amp; !!z ||
						 type == "=" &amp;&amp; z == m[5] ||
						 type == "!=" &amp;&amp; z != m[5] ||
						 type == "^=" &amp;&amp; z &amp;&amp; !z.indexOf(m[5]) ||
						 type == "$=" &amp;&amp; z.substr(z.length - m[5].length) == m[5] ||
						 (type == "*=" || type == "~=") &amp;&amp; z.indexOf(m[5]) &gt;= 0) ^ not )
							tmp.push( a );
				}
				
				r = tmp;

			
			} else if ( m[1] == ":" &amp;&amp; m[2] == "nth-child" ) {
				var merge = {}, tmp = [],
					
					test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
						m[3] == "even" &amp;&amp; "2n" || m[3] == "odd" &amp;&amp; "2n+1" ||
						!/\D/.test(m[3]) &amp;&amp; "0n+" + m[3] || m[3]),
					
					first = (test[1] + (test[2] || 1)) - 0, last = test[3] - 0;
 
				
				for ( var i = 0, rl = r.length; i &lt; rl; i++ ) {
					var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode);

					if ( !merge[id] ) {
						var c = 1;

						for ( var n = parentNode.firstChild; n; n = n.nextSibling )
							if ( n.nodeType == 1 )
								n.nodeIndex = c++;

						merge[id] = true;
					}

					var add = false;

					if ( first == 0 ) {
						if ( node.nodeIndex == last )
							add = true;
					} else if ( (node.nodeIndex - last) % first == 0 &amp;&amp; (node.nodeIndex - last) / first &gt;= 0 )
						add = true;

					if ( add ^ not )
						tmp.push( node );
				}

				r = tmp;

			
			} else {
				var fn = jQuery.expr[ m[1] ];
				if ( typeof fn == "object" )
					fn = fn[ m[2] ];

				if ( typeof fn == "string" )
					fn = eval("false||function(a,i){return " + fn + ";}");

				
				r = jQuery.grep( r, function(elem, i){
					return fn(elem, i, m, r);
				}, not );
			}
		}

		return { r: r, t: t };
	},

	dir: function( elem, dir ){
		var matched = [];
		var cur = elem[dir];
		while ( cur &amp;&amp; cur != document ) {
			if ( cur.nodeType == 1 )
				matched.push( cur );
			cur = cur[dir];
		}
		return matched;
	},
	
	nth: function(cur,result,dir,elem){
		result = result || 1;
		var num = 0;

		for ( ; cur; cur = cur[dir] )
			if ( cur.nodeType == 1 &amp;&amp; ++num == result )
				break;

		return cur;
	},
	
	sibling: function( n, elem ) {
		var r = [];

		for ( ; n; n = n.nextSibling ) {
			if ( n.nodeType == 1 &amp;&amp; (!elem || n != elem) )
				r.push( n );
		}

		return r;
	}
});

jQuery.event = {


	add: function(elem, types, handler, data) {
		if ( elem.nodeType == 3 || elem.nodeType == 8 )
			return;

		if ( jQuery.browser.msie &amp;&amp; elem.setInterval != undefined )
			elem = window;

		if ( !handler.guid )
			handler.guid = this.guid++;
	
		if( data != undefined ) { 
		
			var fn = handler; 

			
			handler = function() { 
				
				return fn.apply(this, arguments); 
			};

			
			handler.data = data;

		
			handler.guid = fn.guid;
		}

	
		var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
			handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
				
				var val;

				
				if ( typeof jQuery == "undefined" || jQuery.event.triggered )
					return val;
		
				val = jQuery.event.handle.apply(arguments.callee.elem, arguments);
		
				return val;
			});

		handle.elem = elem;
			
	
			jQuery.each(types.split(/\s+/), function(index, type) {
			
				var parts = type.split(".");
				type = parts[0];
				handler.type = parts[1];

				
				var handlers = events[type];

				if (!handlers) {
					handlers = events[type] = {};
		
		
					if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem) === false ) {
					
						if (elem.addEventListener)
							elem.addEventListener(type, handle, false);
						else if (elem.attachEvent)
							elem.attachEvent("on" + type, handle);
					}
				}

		
				handlers[handler.guid] = handler;

			
				jQuery.event.global[type] = true;
			});
		
		
		elem = null;
	},

	guid: 1,
	global: {},

	
	remove: function(elem, types, handler) {
	
		if ( elem.nodeType == 3 || elem.nodeType == 8 )
			return;

		var events = jQuery.data(elem, "events"), ret, index;

		if ( events ) {
			
			if ( types == undefined || (typeof types == "string" &amp;&amp; types.charAt(0) == ".") )
				for ( var type in events )
					this.remove( elem, type + (types || "") );
			else {
			
				if ( types.type ) {
					handler = types.handler;
					types = types.type;
				}
				
			
				jQuery.each(types.split(/\s+/), function(index, type){
				
					var parts = type.split(".");
					type = parts[0];
					
					if ( events[type] ) {
						
						if ( handler )
							delete events[type][handler.guid];
			
						else
							for ( handler in events[type] )
						
								if ( !parts[1] || events[type][handler].type == parts[1] )
									delete events[type][handler];

					
						for ( ret in events[type] ) break;
						if ( !ret ) {
							if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem) === false ) {
								if (elem.removeEventListener)
									elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
								else if (elem.detachEvent)
									elem.detachEvent("on" + type, jQuery.data(elem, "handle"));
							}
							ret = null;
							delete events[type];
						}
					}
				});
			}

		
			for ( ret in events ) break;
			if ( !ret ) {
				var handle = jQuery.data( elem, "handle" );
				if ( handle ) handle.elem = null;
				jQuery.removeData( elem, "events" );
				jQuery.removeData( elem, "handle" );
			}
		}
	},

	trigger: function(type, data, elem, donative, extra) {
	
		data = jQuery.makeArray(data || []);

		if ( type.indexOf("!") &gt;= 0 ) {
			type = type.slice(0, -1);
			var exclusive = true;
		}

		
		if ( !elem ) {
			
			if ( this.global[type] )
				jQuery("*").add([window, document]).trigger(type, data);

		} else {
			
			if ( elem.nodeType == 3 || elem.nodeType == 8 )
				return undefined;

			var val, ret, fn = jQuery.isFunction( elem[ type ] || null ),
			
				event = !data[0] || !data[0].preventDefault;
			
			if ( event )
				data.unshift( this.fix({ type: type, target: elem }) );

			
			data[0].type = type;
			if ( exclusive )
				data[0].exclusive = true;

		
			if ( jQuery.isFunction( jQuery.data(elem, "handle") ) )
				val = jQuery.data(elem, "handle").apply( elem, data );

			
			if ( !fn &amp;&amp; elem["on"+type] &amp;&amp; elem["on"+type].apply( elem, data ) === false )
				val = false;

			if ( event )
				data.shift();

			if ( extra &amp;&amp; jQuery.isFunction( extra ) ) {
		
				ret = extra.apply( elem, val == null ? data : data.concat( val ) );
			
				if (ret !== undefined)
					val = ret;
			}

			if ( fn &amp;&amp; donative !== false &amp;&amp; val !== false &amp;&amp; !(jQuery.nodeName(elem, 'a') &amp;&amp; type == "click") ) {
				this.triggered = true;
				try {
					elem[ type ]();
			
				} catch (e) {}
			}

			this.triggered = false;
		}

		return val;
	},

	handle: function(event) {
		
		var val;

	
		event = jQuery.event.fix( event || window.event || {} ); 

	
		var parts = event.type.split(".");
		event.type = parts[0];

		var handlers = jQuery.data(this, "events") &amp;&amp; jQuery.data(this, "events")[event.type], args = Array.prototype.slice.call( arguments, 1 );
		args.unshift( event );

		for ( var j in handlers ) {
			var handler = handlers[j];
	
			args[0].handler = handler;
			args[0].data = handler.data;

		
			if ( !parts[1] &amp;&amp; !event.exclusive || handler.type == parts[1] ) {
				var ret = handler.apply( this, args );

				if ( val !== false )
					val = ret;

				if ( ret === false ) {
					event.preventDefault();
					event.stopPropagation();
				}
			}
		}

	
		if (jQuery.browser.msie)
			event.target = event.preventDefault = event.stopPropagation =
				event.handler = event.data = null;

		return val;
	},

	fix: function(event) {
	
		var originalEvent = event;
		event = jQuery.extend({}, originalEvent);
		
	
		event.preventDefault = function() {
			
			if (originalEvent.preventDefault)
				originalEvent.preventDefault();
			
			originalEvent.returnValue = false;
		};
		event.stopPropagation = function() {
		
			if (originalEvent.stopPropagation)
				originalEvent.stopPropagation();
			
			originalEvent.cancelBubble = true;
		};
		
		
		if ( !event.target )
			event.target = event.srcElement || document; 
				
		
		if ( event.target.nodeType == 3 )
			event.target = originalEvent.target.parentNode;

		
		if ( !event.relatedTarget &amp;&amp; event.fromElement )
			event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;

		
		if ( event.pageX == null &amp;&amp; event.clientX != null ) {
			var doc = document.documentElement, body = document.body;
			event.pageX = event.clientX + (doc &amp;&amp; doc.scrollLeft || body &amp;&amp; body.scrollLeft || 0) - (doc.clientLeft || 0);
			event.pageY = event.clientY + (doc &amp;&amp; doc.scrollTop || body &amp;&amp; body.scrollTop || 0) - (doc.clientTop || 0);
		}
			
	
		if ( !event.which &amp;&amp; ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
			event.which = event.charCode || event.keyCode;
		
		if ( !event.metaKey &amp;&amp; event.ctrlKey )
			event.metaKey = event.ctrlKey;

	
		if ( !event.which &amp;&amp; event.button )
			event.which = (event.button &amp; 1 ? 1 : ( event.button &amp; 2 ? 3 : ( event.button &amp; 4 ? 2 : 0 ) ));
			
		return event;
	},
	
	special: {
		ready: {
			setup: function() {
			
				bindReady();
				return;
			},
			
			teardown: function() { return; }
		},
		
		mouseenter: {
			setup: function() {
				if ( jQuery.browser.msie ) return false;
				jQuery(this).bind("mouseover", jQuery.event.special.mouseenter.handler);
				return true;
			},
		
			teardown: function() {
				if ( jQuery.browser.msie ) return false;
				jQuery(this).unbind("mouseover", jQuery.event.special.mouseenter.handler);
				return true;
			},
			
			handler: function(event) {
				
				if ( withinElement(event, this) ) return true;
				
				arguments[0].type = "mouseenter";
				return jQuery.event.handle.apply(this, arguments);
			}
		},
	
		mouseleave: {
			setup: function() {
				if ( jQuery.browser.msie ) return false;
				jQuery(this).bind("mouseout", jQuery.event.special.mouseleave.handler);
				return true;
			},
		
			teardown: function() {
				if ( jQuery.browser.msie ) return false;
				jQuery(this).unbind("mouseout", jQuery.event.special.mouseleave.handler);
				return true;
			},
			
			handler: function(event) {
				
				if ( withinElement(event, this) ) return true;
				
				arguments[0].type = "mouseleave";
				return jQuery.event.handle.apply(this, arguments);
			}
		}
	}
};

jQuery.fn.extend({
	bind: function( type, data, fn ) {
		return type == "unload" ? this.one(type, data, fn) : this.each(function(){
			jQuery.event.add( this, type, fn || data, fn &amp;&amp; data );
		});
	},
	
	one: function( type, data, fn ) {
		return this.each(function(){
			jQuery.event.add( this, type, function(event) {
				jQuery(this).unbind(event);
				return (fn || data).apply( this, arguments);
			}, fn &amp;&amp; data);
		});
	},

	unbind: function( type, fn ) {
		return this.each(function(){
			jQuery.event.remove( this, type, fn );
		});
	},

	trigger: function( type, data, fn ) {
		return this.each(function(){
			jQuery.event.trigger( type, data, this, true, fn );
		});
	},

	triggerHandler: function( type, data, fn ) {
		if ( this[0] )
			return jQuery.event.trigger( type, data, this[0], false, fn );
		return undefined;
	},

	toggle: function() {
	
		var args = arguments;

		return this.click(function(event) {
		
			this.lastToggle = 0 == this.lastToggle ? 1 : 0;
			
			
			event.preventDefault();
			
		
			return args[this.lastToggle].apply( this, arguments ) || false;
		});
	},

	hover: function(fnOver, fnOut) {
		return this.bind('mouseenter', fnOver).bind('mouseleave', fnOut);
	},
	
	ready: function(fn) {
	
		bindReady();

		if ( jQuery.isReady )
			
			fn.call( document, jQuery );
			
		
		else
			
			jQuery.readyList.push( function() { return fn.call(this, jQuery); } );
	
		return this;
	}
});

jQuery.extend({
	isReady: false,
	readyList: [],
	
	ready: function() {
		
		if ( !jQuery.isReady ) {
			
			jQuery.isReady = true;
			
			
			if ( jQuery.readyList ) {
				
				jQuery.each( jQuery.readyList, function(){
					this.apply( document );
				});
				
				
				jQuery.readyList = null;
			}
		
		
			jQuery(document).triggerHandler("ready");
		}
	}
});

var readyBound = false;

function bindReady(){
	if ( readyBound ) return;
	readyBound = true;

	
	if ( document.addEventListener &amp;&amp; !jQuery.browser.opera)
		
		document.addEventListener( "DOMContentLoaded", jQuery.ready, false );

	if ( jQuery.browser.msie &amp;&amp; window == top ) (function(){
		if (jQuery.isReady) return;
		try {
			
			document.documentElement.doScroll("left");
		} catch( error ) {
			setTimeout( arguments.callee, 0 );
			return;
		}
	
		jQuery.ready();
	})();

	if ( jQuery.browser.opera )
		document.addEventListener( "DOMContentLoaded", function () {
			if (jQuery.isReady) return;
			for (var i = 0; i &lt; document.styleSheets.length; i++)
				if (document.styleSheets[i].disabled) {
					setTimeout( arguments.callee, 0 );
					return;
				}
			
			jQuery.ready();
		}, false);

	if ( jQuery.browser.safari ) {
		var numStyles;
		(function(){
			if (jQuery.isReady) return;
			if ( document.readyState != "loaded" &amp;&amp; document.readyState != "complete" ) {
				setTimeout( arguments.callee, 0 );
				return;
			}
			if ( numStyles === undefined )
				numStyles = jQuery("style, link[rel=stylesheet]").length;
			if ( document.styleSheets.length != numStyles ) {
				setTimeout( arguments.callee, 0 );
				return;
			}
			
			jQuery.ready();
		})();
	}


	jQuery.event.add( window, "load", jQuery.ready );
}

jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
	"mousedown,mouseup,mousemove,mouseover,mouseout,change,select," + 
	"submit,keydown,keypress,keyup,error").split(","), function(i, name){
	
	jQuery.fn[name] = function(fn){
		return fn ? this.bind(name, fn) : this.trigger(name);
	};
});


var withinElement = function(event, elem) {
	
	var parent = event.relatedTarget;
	
	while ( parent &amp;&amp; parent != elem ) try { parent = parent.parentNode; } catch(error) { parent = elem; }
	
	return parent == elem;
};


jQuery(window).bind("unload", function() {
	jQuery("*").add(document).unbind();
});
jQuery.fn.extend({
	load: function( url, params, callback ) {
		if ( jQuery.isFunction( url ) )
			return this.bind("load", url);

		var off = url.indexOf(" ");
		if ( off &gt;= 0 ) {
			var selector = url.slice(off, url.length);
			url = url.slice(0, off);
		}

		callback = callback || function(){};

	
		var type = "GET";

	
		if ( params )
			
			if ( jQuery.isFunction( params ) ) {
				
				callback = params;
				params = null;

			
			} else {
				params = jQuery.param( params );
				type = "POST";
			}

		var self = this;

		
		jQuery.ajax({
			url: url,
			type: type,
			dataType: "html",
			data: params,
			complete: function(res, status){
				
				if ( status == "success" || status == "notmodified" )
					
					self.html( selector ?
						
						jQuery("&lt;div/&gt;")
							
							.append(res.responseText.replace(/&lt;script(.|\s)*?\/script&gt;/g, ""))

							
							.find(selector) :

					
						res.responseText );

				self.each( callback, [res.responseText, status, res] );
			}
		});
		return this;
	},

	serialize: function() {
		return jQuery.param(this.serializeArray());
	},
	serializeArray: function() {
		return this.map(function(){
			return jQuery.nodeName(this, "form") ?
				jQuery.makeArray(this.elements) : this;
		})
		.filter(function(){
			return this.name &amp;&amp; !this.disabled &amp;&amp; 
				(this.checked || /select|textarea/i.test(this.nodeName) || 
					/text|hidden|password/i.test(this.type));
		})
		.map(function(i, elem){
			var val = jQuery(this).val();
			return val == null ? null :
				val.constructor == Array ?
					jQuery.map( val, function(val, i){
						return {name: elem.name, value: val};
					}) :
					{name: elem.name, value: val};
		}).get();
	}
});


jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
	jQuery.fn[o] = function(f){
		return this.bind(o, f);
	};
});

var jsc = (new Date).getTime();

jQuery.extend({
	get: function( url, data, callback, type ) {
		
		if ( jQuery.isFunction( data ) ) {
			callback = data;
			data = null;
		}
		
		return jQuery.ajax({
			type: "GET",
			url: url,
			data: data,
			success: callback,
			dataType: type
		});
	},

	getScript: function( url, callback ) {
		return jQuery.get(url, null, callback, "script");
	},

	getJSON: function( url, data, callback ) {
		return jQuery.get(url, data, callback, "json");
	},

	post: function( url, data, callback, type ) {
		if ( jQuery.isFunction( data ) ) {
			callback = data;
			data = {};
		}

		return jQuery.ajax({
			type: "POST",
			url: url,
			data: data,
			success: callback,
			dataType: type
		});
	},

	ajaxSetup: function( settings ) {
		jQuery.extend( jQuery.ajaxSettings, settings );
	},

	ajaxSettings: {
		global: true,
		type: "GET",
		timeout: 0,
		contentType: "application/x-www-form-urlencoded",
		processData: true,
		async: true,
		data: null,
		username: null,
		password: null,
		accepts: {
			xml: "application/xml, text/xml",
			html: "text/html",
			script: "text/javascript, application/javascript",
			json: "application/json, text/javascript",
			text: "text/plain",
			_default: "*/*"
		}
	},
	
	
	lastModified: {},

	ajax: function( s ) {
		var jsonp, jsre = /=\?(&amp;|$)/g, status, data;

	
		s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));

		
		if ( s.data &amp;&amp; s.processData &amp;&amp; typeof s.data != "string" )
			s.data = jQuery.param(s.data);

		
		if ( s.dataType == "jsonp" ) {
			if ( s.type.toLowerCase() == "get" ) {
				if ( !s.url.match(jsre) )
					s.url += (s.url.match(/\?/) ? "&amp;" : "?") + (s.jsonp || "callback") + "=?";
			} else if ( !s.data || !s.data.match(jsre) )
				s.data = (s.data ? s.data + "&amp;" : "") + (s.jsonp || "callback") + "=?";
			s.dataType = "json";
		}

		
		if ( s.dataType == "json" &amp;&amp; (s.data &amp;&amp; s.data.match(jsre) || s.url.match(jsre)) ) {
			jsonp = "jsonp" + jsc++;

			
			if ( s.data )
				s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
			s.url = s.url.replace(jsre, "=" + jsonp + "$1");

	
			s.dataType = "script";

		
			window[ jsonp ] = function(tmp){
				data = tmp;
				success();
				complete();
			
				window[ jsonp ] = undefined;
				try{ delete window[ jsonp ]; } catch(e){}
				if ( head )
					head.removeChild( script );
			};
		}

		if ( s.dataType == "script" &amp;&amp; s.cache == null )
			s.cache = false;

		if ( s.cache === false &amp;&amp; s.type.toLowerCase() == "get" ) {
			var ts = (new Date()).getTime();
			
			var ret = s.url.replace(/(\?|&amp;)_=.*?(&amp;|$)/, "$1_=" + ts + "$2");
		
			s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&amp;" : "?") + "_=" + ts : "");
		}

		
		if ( s.data &amp;&amp; s.type.toLowerCase() == "get" ) {
			s.url += (s.url.match(/\?/) ? "&amp;" : "?") + s.data;

		
			s.data = null;
		}

	
		if ( s.global &amp;&amp; ! jQuery.active++ )
			jQuery.event.trigger( "ajaxStart" );


		if ( (!s.url.indexOf("http") || !s.url.indexOf("//")) &amp;&amp; s.dataType == "script" &amp;&amp; s.type.toLowerCase() == "get" ) {
			var head = document.getElementsByTagName("head")[0];
			var script = document.createElement("script");
			script.src = s.url;
			if (s.scriptCharset)
				script.charset = s.scriptCharset;

			if ( !jsonp ) {
				var done = false;

			
				script.onload = script.onreadystatechange = function(){
					if ( !done &amp;&amp; (!this.readyState || 
							this.readyState == "loaded" || this.readyState == "complete") ) {
						done = true;
						success();
						complete();
						head.removeChild( script );
					}
				};
			}

			head.appendChild(script);

		
			return undefined;
		}

		var requestDone = false;

		var xml = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();

	
		xml.open(s.type, s.url, s.async, s.username, s.password);


		try {
		
			if ( s.data )
				xml.setRequestHeader("Content-Type", s.contentType);

		
			if ( s.ifModified )
				xml.setRequestHeader("If-Modified-Since",
					jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );

	
			xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");

			
			xml.setRequestHeader("Accept", s.dataType &amp;&amp; s.accepts[ s.dataType ] ?
				s.accepts[ s.dataType ] + ", */*" :
				s.accepts._default );
		} catch(e){}

		
		if ( s.beforeSend )
			s.beforeSend(xml);
			
		if ( s.global )
			jQuery.event.trigger("ajaxSend", [xml, s]);

		
		var onreadystatechange = function(isTimeout){
			
			if ( !requestDone &amp;&amp; xml &amp;&amp; (xml.readyState == 4 || isTimeout == "timeout") ) {
				requestDone = true;
				
				
				if (ival) {
					clearInterval(ival);
					ival = null;
				}
				
				status = isTimeout == "timeout" &amp;&amp; "timeout" ||
					!jQuery.httpSuccess( xml ) &amp;&amp; "error" ||
					s.ifModified &amp;&amp; jQuery.httpNotModified( xml, s.url ) &amp;&amp; "notmodified" ||
					"success";

				if ( status == "success" ) {
					
					try {
					
						data = jQuery.httpData( xml, s.dataType );
					} catch(e) {
						status = "parsererror";
					}
				}

			
				if ( status == "success" ) {
					
					var modRes;
					try {
						modRes = xml.getResponseHeader("Last-Modified");
					} catch(e) {} 
	
					if ( s.ifModified &amp;&amp; modRes )
						jQuery.lastModified[s.url] = modRes;

					if ( !jsonp )
						success();	
				} else
					jQuery.handleError(s, xml, status);

				complete();

			
				if ( s.async )
					xml = null;
			}
		};
		
		if ( s.async ) {
			
			var ival = setInterval(onreadystatechange, 13); 

			if ( s.timeout &gt; 0 )
				setTimeout(function(){
					
					if ( xml ) {
						
						xml.abort();
	
						if( !requestDone )
							onreadystatechange( "timeout" );
					}
				}, s.timeout);
		}
			
		
		try {
			xml.send(s.data);
		} catch(e) {
			jQuery.handleError(s, xml, null, e);
		}
		
		if ( !s.async )
			onreadystatechange();

		function success(){
		
			if ( s.success )
				s.success( data, status );

			
			if ( s.global )
				jQuery.event.trigger( "ajaxSuccess", [xml, s] );
		}

		function complete(){
			
			if ( s.complete )
				s.complete(xml, status);

			if ( s.global )
				jQuery.event.trigger( "ajaxComplete", [xml, s] );

			
			if ( s.global &amp;&amp; ! --jQuery.active )
				jQuery.event.trigger( "ajaxStop" );
		}
		
		
		return xml;
	},

	handleError: function( s, xml, status, e ) {
		
		if ( s.error ) s.error( xml, status, e );

		
		if ( s.global )
			jQuery.event.trigger( "ajaxError", [xml, s, e] );
	},

	
	active: 0,


	httpSuccess: function( r ) {
		try {
			
			return !r.status &amp;&amp; location.protocol == "file:" ||
				( r.status &gt;= 200 &amp;&amp; r.status &lt; 300 ) || r.status == 304 || r.status == 1223 ||
				jQuery.browser.safari &amp;&amp; r.status == undefined;
		} catch(e){}
		return false;
	},

	
	httpNotModified: function( xml, url ) {
		try {
			var xmlRes = xml.getResponseHeader("Last-Modified");

			
			return xml.status == 304 || xmlRes == jQuery.lastModified[url] ||
				jQuery.browser.safari &amp;&amp; xml.status == undefined;
		} catch(e){}
		return false;
	},

	httpData: function( r, type ) {
		var ct = r.getResponseHeader("content-type");
		var xml = type == "xml" || !type &amp;&amp; ct &amp;&amp; ct.indexOf("xml") &gt;= 0;
		var data = xml ? r.responseXML : r.responseText;

		if ( xml &amp;&amp; data.documentElement.tagName == "parsererror" )
			throw "parsererror";

		if ( type == "script" )
			jQuery.globalEval( data );

		if ( type == "json" )
			data = eval("(" + data + ")");

		return data;
	},


	param: function( a ) {
		var s = [];

	
		if ( a.constructor == Array || a.jquery )
			
			jQuery.each( a, function(){
				s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) );
			});

	
		else
			
			for ( var j in a )
				
				if ( a[j] &amp;&amp; a[j].constructor == Array )
					jQuery.each( a[j], function(){
						s.push( encodeURIComponent(j) + "=" + encodeURIComponent( this ) );
					});
				else
					s.push( encodeURIComponent(j) + "=" + encodeURIComponent( a[j] ) );

		
		return s.join("&amp;").replace(/%20/g, "+");
	}

});
jQuery.fn.extend({
	show: function(speed,callback){
		return speed ?
			this.animate({
				height: "show", width: "show", opacity: "show"
			}, speed, callback) :
			
			this.filter(":hidden").each(function(){
				this.style.display = this.oldblock || "";
				if ( jQuery.css(this,"display") == "none" ) {
					var elem = jQuery("&lt;" + this.tagName + " /&gt;").appendTo("body");
					this.style.display = elem.css("display");
					
					if (this.style.display == "none")
						this.style.display = "block";
					elem.remove();
				}
			}).end();
	},
	
	hide: function(speed,callback){
		return speed ?
			this.animate({
				height: "hide", width: "hide", opacity: "hide"
			}, speed, callback) :
			
			this.filter(":visible").each(function(){
				this.oldblock = this.oldblock || jQuery.css(this,"display");
				this.style.display = "none";
			}).end();
	},


	_toggle: jQuery.fn.toggle,
	
	toggle: function( fn, fn2 ){
		return jQuery.isFunction(fn) &amp;&amp; jQuery.isFunction(fn2) ?
			this._toggle( fn, fn2 ) :
			fn ?
				this.animate({
					height: "toggle", width: "toggle", opacity: "toggle"
				}, fn, fn2) :
				this.each(function(){
					jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
				});
	},
	
	slideDown: function(speed,callback){
		return this.animate({height: "show"}, speed, callback);
	},
	
	slideUp: function(speed,callback){
		return this.animate({height: "hide"}, speed, callback);
	},

	slideToggle: function(speed, callback){
		return this.animate({height: "toggle"}, speed, callback);
	},
	
	fadeIn: function(speed, callback){
		return this.animate({opacity: "show"}, speed, callback);
	},
	
	fadeOut: function(speed, callback){
		return this.animate({opacity: "hide"}, speed, callback);
	},
	
	fadeTo: function(speed,to,callback){
		return this.animate({opacity: to}, speed, callback);
	},
	
	animate: function( prop, speed, easing, callback ) {
		var optall = jQuery.speed(speed, easing, callback);

		return this[ optall.queue === false ? "each" : "queue" ](function(){
			if ( this.nodeType != 1)
				return false;

			var opt = jQuery.extend({}, optall);
			var hidden = jQuery(this).is(":hidden"), self = this;
			
			for ( var p in prop ) {
				if ( prop[p] == "hide" &amp;&amp; hidden || prop[p] == "show" &amp;&amp; !hidden )
					return jQuery.isFunction(opt.complete) &amp;&amp; opt.complete.apply(this);

				if ( p == "height" || p == "width" ) {
					
					opt.display = jQuery.css(this, "display");

					
					opt.overflow = this.style.overflow;
				}
			}

			if ( opt.overflow != null )
				this.style.overflow = "hidden";

			opt.curAnim = jQuery.extend({}, prop);
			
			jQuery.each( prop, function(name, val){
				var e = new jQuery.fx( self, opt, name );

				if ( /toggle|show|hide/.test(val) )
					e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
				else {
					var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
						start = e.cur(true) || 0;

					if ( parts ) {
						var end = parseFloat(parts[2]),
							unit = parts[3] || "px";

						
						if ( unit != "px" ) {
							self.style[ name ] = (end || 1) + unit;
							start = ((end || 1) / e.cur(true)) * start;
							self.style[ name ] = start + unit;
						}

						
						if ( parts[1] )
							end = ((parts[1] == "-=" ? -1 : 1) * end) + start;

						e.custom( start, end, unit );
					} else
						e.custom( start, val, "" );
				}
			});

			
			return true;
		});
	},
	
	queue: function(type, fn){
		if ( jQuery.isFunction(type) || ( type &amp;&amp; type.constructor == Array )) {
			fn = type;
			type = "fx";
		}

		if ( !type || (typeof type == "string" &amp;&amp; !fn) )
			return queue( this[0], type );

		return this.each(function(){
			if ( fn.constructor == Array )
				queue(this, type, fn);
			else {
				queue(this, type).push( fn );
			
				if ( queue(this, type).length == 1 )
					fn.apply(this);
			}
		});
	},

	stop: function(clearQueue, gotoEnd){
		var timers = jQuery.timers;

		if (clearQueue)
			this.queue([]);

		this.each(function(){
			
			for ( var i = timers.length - 1; i &gt;= 0; i-- )
				if ( timers[i].elem == this ) {
					if (gotoEnd)
					
						timers[i](true);
					timers.splice(i, 1);
				}
		});

		
		if (!gotoEnd)
			this.dequeue();

		return this;
	}

});

var queue = function( elem, type, array ) {
	if ( !elem )
		return undefined;

	type = type || "fx";

	var q = jQuery.data( elem, type + "queue" );

	if ( !q || array )
		q = jQuery.data( elem, type + "queue", 
			array ? jQuery.makeArray(array) : [] );

	return q;
};

jQuery.fn.dequeue = function(type){
	type = type || "fx";

	return this.each(function(){
		var q = queue(this, type);

		q.shift();

		if ( q.length )
			q[0].apply( this );
	});
};

jQuery.extend({
	
	speed: function(speed, easing, fn) {
		var opt = speed &amp;&amp; speed.constructor == Object ? speed : {
			complete: fn || !fn &amp;&amp; easing || 
				jQuery.isFunction( speed ) &amp;&amp; speed,
			duration: speed,
			easing: fn &amp;&amp; easing || easing &amp;&amp; easing.constructor != Function &amp;&amp; easing
		};

		opt.duration = (opt.duration &amp;&amp; opt.duration.constructor == Number ? 
			opt.duration : 
			{ slow: 600, fast: 200 }[opt.duration]) || 400;
	
	
		opt.old = opt.complete;
		opt.complete = function(){
			if ( opt.queue !== false )
				jQuery(this).dequeue();
			if ( jQuery.isFunction( opt.old ) )
				opt.old.apply( this );
		};
	
		return opt;
	},
	
	easing: {
		linear: function( p, n, firstNum, diff ) {
			return firstNum + diff * p;
		},
		swing: function( p, n, firstNum, diff ) {
			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
		}
	},
	
	timers: [],
	timerId: null,

	fx: function( elem, options, prop ){
		this.options = options;
		this.elem = elem;
		this.prop = prop;

		if ( !options.orig )
			options.orig = {};
	}

});

jQuery.fx.prototype = {

	
	update: function(){
		if ( this.options.step )
			this.options.step.apply( this.elem, [ this.now, this ] );

		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );

		
		if ( this.prop == "height" || this.prop == "width" )
			this.elem.style.display = "block";
	},

	
	cur: function(force){
		if ( this.elem[this.prop] != null &amp;&amp; this.elem.style[this.prop] == null )
			return this.elem[ this.prop ];

		var r = parseFloat(jQuery.css(this.elem, this.prop, force));
		return r &amp;&amp; r &gt; -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
	},

	
	custom: function(from, to, unit){
		this.startTime = (new Date()).getTime();
		this.start = from;
		this.end = to;
		this.unit = unit || this.unit || "px";
		this.now = this.start;
		this.pos = this.state = 0;
		this.update();

		var self = this;
		function t(gotoEnd){
			return self.step(gotoEnd);
		}

		t.elem = this.elem;

		jQuery.timers.push(t);

		if ( jQuery.timerId == null ) {
			jQuery.timerId = setInterval(function(){
				var timers = jQuery.timers;
				
				for ( var i = 0; i &lt; timers.length; i++ )
					if ( !timers[i]() )
						timers.splice(i--, 1);

				if ( !timers.length ) {
					clearInterval( jQuery.timerId );
					jQuery.timerId = null;
				}
			}, 13);
		}
	},


	show: function(){
		
		this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
		this.options.show = true;

		
		this.custom(0, this.cur());

	
		if ( this.prop == "width" || this.prop == "height" )
			this.elem.style[this.prop] = "1px";
		
	
		jQuery(this.elem).show();
	},

	
	hide: function(){
	
		this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
		this.options.hide = true;

		
		this.custom(this.cur(), 0);
	},

	
	step: function(gotoEnd){
		var t = (new Date()).getTime();

		if ( gotoEnd || t &gt; this.options.duration + this.startTime ) {
			this.now = this.end;
			this.pos = this.state = 1;
			this.update();

			this.options.curAnim[ this.prop ] = true;

			var done = true;
			for ( var i in this.options.curAnim )
				if ( this.options.curAnim[i] !== true )
					done = false;

			if ( done ) {
				if ( this.options.display != null ) {
				
					this.elem.style.overflow = this.options.overflow;
				
					
					this.elem.style.display = this.options.display;
					if ( jQuery.css(this.elem, "display") == "none" )
						this.elem.style.display = "block";
				}

				
				if ( this.options.hide )
					this.elem.style.display = "none";

				
				if ( this.options.hide || this.options.show )
					for ( var p in this.options.curAnim )
						jQuery.attr(this.elem.style, p, this.options.orig[p]);
			}

			
			if ( done &amp;&amp; jQuery.isFunction( this.options.complete ) )
				
				this.options.complete.apply( this.elem );

			return false;
		} else {
			var n = t - this.startTime;
			this.state = n / this.options.duration;

			
			this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
			this.now = this.start + ((this.end - this.start) * this.pos);

			
			this.update();
		}

		return true;
	}

};

jQuery.fx.step = {
	scrollLeft: function(fx){
		fx.elem.scrollLeft = fx.now;
	},

	scrollTop: function(fx){
		fx.elem.scrollTop = fx.now;
	},

	opacity: function(fx){
		jQuery.attr(fx.elem.style, "opacity", fx.now);
	},

	_default: function(fx){
		fx.elem.style[ fx.prop ] = fx.now + fx.unit;
	}
};

jQuery.fn.offset = function() {
	var left = 0, top = 0, elem = this[0], results;
	
	if ( elem ) with ( jQuery.browser ) {
		var parent       = elem.parentNode, 
		    offsetChild  = elem,
		    offsetParent = elem.offsetParent, 
		    doc          = elem.ownerDocument,
		    safari2      = safari &amp;&amp; parseInt(version) &lt; 522 &amp;&amp; !/adobeair/i.test(userAgent),
		    fixed        = jQuery.css(elem, "position") == "fixed";
	

		if ( elem.getBoundingClientRect ) {
			var box = elem.getBoundingClientRect();
		

			add(box.left + Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
				box.top  + Math.max(doc.documentElement.scrollTop,  doc.body.scrollTop));
		

			add( -doc.documentElement.clientLeft, -doc.documentElement.clientTop );
	

		} else {
		

			add( elem.offsetLeft, elem.offsetTop );
			

			while ( offsetParent ) {

				add( offsetParent.offsetLeft, offsetParent.offsetTop );
			

				if ( mozilla &amp;&amp; !/^t(able|d|h)$/i.test(offsetParent.tagName) || safari &amp;&amp; !safari2 )
					border( offsetParent );
					

				if ( !fixed &amp;&amp; jQuery.css(offsetParent, "position") == "fixed" )
					fixed = true;
			

				offsetChild  = /^body$/i.test(offsetParent.tagName) ? offsetChild : offsetParent;

				offsetParent = offsetParent.offsetParent;
			}
		

			while ( parent &amp;&amp; parent.tagName &amp;&amp; !/^body|html$/i.test(parent.tagName) ) {

				if ( !/^inline|table.*$/i.test(jQuery.css(parent, "display")) )

					add( -parent.scrollLeft, -parent.scrollTop );
			

				if ( mozilla &amp;&amp; jQuery.css(parent, "overflow") != "visible" )
					border( parent );
			

				parent = parent.parentNode;
			}
		

			if ( (safari2 &amp;&amp; (fixed || jQuery.css(offsetChild, "position") == "absolute")) || 
				(mozilla &amp;&amp; jQuery.css(offsetChild, "position") != "absolute") )
					add( -doc.body.offsetLeft, -doc.body.offsetTop );
			

			if ( fixed )
				add(Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
					Math.max(doc.documentElement.scrollTop,  doc.body.scrollTop));
		}


		results = { top: top, left: left };
	}

	function border(elem) {
		add( jQuery.curCSS(elem, "borderLeftWidth", true), jQuery.curCSS(elem, "borderTopWidth", true) );
	}

	function add(l, t) {
		left += parseInt(l) || 0;
		top += parseInt(t) || 0;
	}

	return results;
};
})();
//]]&gt;
&lt;/script&gt;

&lt;script language="javascript" type="text/javascript"&gt;
//&lt;![CDATA[
(function($) {
    function Plot(target_, data_, options_) {
 
        var series = [],
            options = {

            colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],
                legend: {
                    show: true,
                    noColumns: 1, 
                    labelFormatter: null, 
                    labelBoxBorderColor: "#ccc", 
                    container: null, 
                    position: "ne", 
                    margin: 5, 
                    backgroundColor: null, 
                    backgroundOpacity: 0.85 
                },
                xaxis: {
                    mode: null,
                    min: null, 
                    max: null,
                    autoscaleMargin: null,
                    ticks: null, 
                    tickFormatter: null, 
                    labelWidth: null, 
                    labelHeight: null,
                    
                    
                    tickDecimals: null,
                    tickSize: null,
                    minTickSize: null, 
                    monthNames: null, 
                    timeformat: null 
                },
                yaxis: {
                    autoscaleMargin: 0.02
                },
                x2axis: {
                    autoscaleMargin: null
                },
                y2axis: {
                    autoscaleMargin: 0.02
                },              
                points: {
                    show: false,
                    radius: 3,
                    lineWidth: 2,
                    fill: true,
                    fillColor: "#ffffff"
                },
                lines: {
                    show: false,
                    lineWidth: 2,
                    fill: false,
                    fillColor: null
                },
                bars: {
                    show: false,
                    lineWidth: 2, 
                    barWidth: 1, 
                    fill: true,
                    fillColor: null,
                    align: "left" 
                },
                grid: {
                    color: "#545454",
                    backgroundColor: null, 
                    tickColor: "#dddddd", 
                    labelMargin: 5,
                    borderWidth: 2,
                    markings: null, 
                    markingsColor: "#f4f4f4",
                    markingsLineWidth: 2,
                    
                    clickable: false,
                    hoverable: false,
                    autoHighlight: true, 
                    mouseActiveRadius: 10
                },
                selection: {
                    mode: null, 
                    color: "#e8cfac"
                },
                shadowSize: 4
            },
        canvas = null,      
        overlay = null,     
        eventHolder = null,
        ctx = null, octx = null,
        target = target_,
        axes = { xaxis: {}, yaxis: {}, x2axis: {}, y2axis: {} },
        plotOffset = { left: 0, right: 0, top: 0, bottom: 0},
        canvasWidth = 0, canvasHeight = 0,
        plotWidth = 0, plotHeight = 0,
        
        workarounds = {};
        
        this.setData = setData;
        this.setupGrid = setupGrid;
        this.draw = draw;
        this.clearSelection = clearSelection;
        this.setSelection = setSelection;
        this.getCanvas = function() { return canvas; };
        this.getPlotOffset = function() { return plotOffset; };
        this.getData = function() { return series; };
        this.getAxes = function() { return axes; };
        this.highlight = highlight;
        this.unhighlight = unhighlight;
        
        
        parseOptions(options_);
        setData(data_);
        constructCanvas();
        setupGrid();
        draw();


        function setData(d) {
            series = parseData(d);

            fillInSeriesOptions();
            processData();
        }
        
        function parseData(d) {
            var res = [];
            for (var i = 0; i &lt; d.length; ++i) {
                var s;
                if (d[i].data) {
                    s = {};
                    for (var v in d[i])
                        s[v] = d[i][v];
                }
                else {
                    s = { data: d[i] };
                }
                res.push(s);
            }

            return res;
        }
        
        function parseOptions(o) {
            $.extend(true, options, o);

            if (options.xaxis.noTicks &amp;&amp; options.xaxis.ticks == null)
                options.xaxis.ticks = options.xaxis.noTicks;
            if (options.yaxis.noTicks &amp;&amp; options.yaxis.ticks == null)
                options.yaxis.ticks = options.yaxis.noTicks;
            if (options.grid.coloredAreas)
                options.grid.markings = options.grid.coloredAreas;
            if (options.grid.coloredAreasColor)
                options.grid.markingsColor = options.grid.coloredAreasColor;
        }

        function fillInSeriesOptions() {
            var i;
            
           
            var neededColors = series.length,
                usedColors = [],
                assignedColors = [];
            for (i = 0; i &lt; series.length; ++i) {
                var sc = series[i].color;
                if (sc != null) {
                    --neededColors;
                    if (typeof sc == "number")
                        assignedColors.push(sc);
                    else
                        usedColors.push(parseColor(series[i].color));
                }
            }
            
          
            for (i = 0; i &lt; assignedColors.length; ++i) {
                neededColors = Math.max(neededColors, assignedColors[i] + 1);
            }

            
            var colors = [], variation = 0;
            i = 0;
            while (colors.length &lt; neededColors) {
                var c;
                if (options.colors.length == i)
                    c = new Color(100, 100, 100);
                else
                    c = parseColor(options.colors[i]);

               
                var sign = variation % 2 == 1 ? -1 : 1;
                var factor = 1 + sign * Math.ceil(variation / 2) * 0.2;
                c.scale(factor, factor, factor);

              
                colors.push(c);
                
                ++i;
                if (i &gt;= options.colors.length) {
                    i = 0;
                    ++variation;
                }
            }

           
            var colori = 0, s;
            for (i = 0; i &lt; series.length; ++i) {
                s = series[i];

                
                if (s.color == null) {
                    s.color = colors[colori].toString();
                    ++colori;
                }
                else if (typeof s.color == "number")
                    s.color = colors[s.color].toString();

                
                s.lines = $.extend(true, {}, options.lines, s.lines);
                s.points = $.extend(true, {}, options.points, s.points);
                s.bars = $.extend(true, {}, options.bars, s.bars);
                if (s.shadowSize == null)
                    s.shadowSize = options.shadowSize;
                if (s.xaxis &amp;&amp; s.xaxis == 2)
                    s.xaxis = axes.x2axis;
                else
                    s.xaxis = axes.xaxis;
                if (s.yaxis &amp;&amp; s.yaxis == 2)
                    s.yaxis = axes.y2axis;
                else
                    s.yaxis = axes.yaxis;
            }
        }
        
        function processData() {
            var topSentry = Number.POSITIVE_INFINITY,
                bottomSentry = Number.NEGATIVE_INFINITY,
                axis;

            for (axis in axes) {
                axes[axis].datamin = topSentry;
                axes[axis].datamax = bottomSentry;
                axes[axis].used = false;
            }
            
            for (var i = 0; i &lt; series.length; ++i) {
                var data = series[i].data,
                    axisx = series[i].xaxis,
                    axisy = series[i].yaxis,
                    mindelta = 0, maxdelta = 0;
                
                
                if (series[i].bars.show) {
                    mindelta = series[i].bars.align == "left" ? 0 : -series[i].bars.barWidth/2;
                    maxdelta = mindelta + series[i].bars.barWidth;
                }
                
                axisx.used = axisy.used = true;
                for (var j = 0; j &lt; data.length; ++j) {
                    if (data[j] == null)
                        continue;
                    
                    var x = data[j][0], y = data[j][1];

                   
                    if (x != null &amp;&amp; !isNaN(x = +x)) {
                        if (x + mindelta &lt; axisx.datamin)
                            axisx.datamin = x + mindelta;
                        if (x + maxdelta &gt; axisx.datamax)
                            axisx.datamax = x + maxdelta;
                    }
                    
                    if (y != null &amp;&amp; !isNaN(y = +y)) {
                        if (y &lt; axisy.datamin)
                            axisy.datamin = y;
                        if (y &gt; axisy.datamax)
                            axisy.datamax = y;
                    }
                    
                    if (x == null || y == null || isNaN(x) || isNaN(y))
                        data[j] = null; 
                }
            }

            for (axis in axes) {
                if (axes[axis].datamin == topSentry)
                    axes[axis].datamin = 0;
                if (axes[axis].datamax == bottomSentry)
                    axes[axis].datamax = 1;
            }
        }

        function constructCanvas() {
            canvasWidth = target.width();
            canvasHeight = target.height();
            target.html("");
            target.css("position", "relative"); 

            if (canvasWidth &lt;= 0 || canvasHeight &lt;= 0)
                throw "Invalid dimensions for plot, width = " + canvasWidth + ", height = " + canvasHeight;

           
            canvas = $('&lt;canvas width="' + canvasWidth + '" height="' + canvasHeight + '"&gt;&lt;/canvas&gt;').appendTo(target).get(0);
            if ($.browser.msie) 
                canvas = window.G_vmlCanvasManager.initElement(canvas);
            ctx = canvas.getContext("2d");

           
            overlay = $('&lt;canvas style="position:absolute;left:0px;top:0px;" width="' + canvasWidth + '" height="' + canvasHeight + '"&gt;&lt;/canvas&gt;').appendTo(target).get(0);
            if ($.browser.msie) 
                overlay = window.G_vmlCanvasManager.initElement(overlay);
            octx = overlay.getContext("2d");


            eventHolder = $([overlay, canvas]);


            if (options.selection.mode != null || options.grid.hoverable) {

                eventHolder.each(function () {
                    this.onmousemove = onMouseMove;
                });

                if (options.selection.mode != null)
                    eventHolder.mousedown(onMouseDown);
            }

            if (options.grid.clickable)
                eventHolder.click(onClick);
        }

        function setupGrid() {
            function setupAxis(axis, options) {
                setRange(axis, options);
                prepareTickGeneration(axis, options);
                setTicks(axis, options);

                if (axis == axes.xaxis || axis == axes.x2axis) {

                    axis.p2c = function (p) { return (p - axis.min) * axis.scale; };
 
                    axis.c2p = function (c) { return axis.min + c / axis.scale; };
                }
                else {
                    axis.p2c = function (p) { return (axis.max - p) * axis.scale; };
                    axis.c2p = function (p) { return axis.max - p / axis.scale; };
                }
            }

            for (var axis in axes)
                setupAxis(axes[axis], options[axis]);

            setSpacing();
            insertLabels();
            insertLegend();
        }
        
        function setRange(axis, axisOptions) {
            var min = axisOptions.min != null ? axisOptions.min : axis.datamin;
            var max = axisOptions.max != null ? axisOptions.max : axis.datamax;

            if (max - min == 0.0) {

                var widen;
                if (max == 0.0)
                    widen = 1.0;
                else
                    widen = 0.01;

                min -= widen;
                max += widen;
            }
            else {

                var margin = axisOptions.autoscaleMargin;
                if (margin != null) {
                    if (axisOptions.min == null) {
                        min -= (max - min) * margin;

                        if (min &lt; 0 &amp;&amp; axis.datamin &gt;= 0)
                            min = 0;
                    }
                    if (axisOptions.max == null) {
                        max += (max - min) * margin;
                        if (max &gt; 0 &amp;&amp; axis.datamax &lt;= 0)
                            max = 0;
                    }
                }
            }
            axis.min = min;
            axis.max = max;
        }

        function prepareTickGeneration(axis, axisOptions) {

            var noTicks;
            if (typeof axisOptions.ticks == "number" &amp;&amp; axisOptions.ticks &gt; 0)
                noTicks = axisOptions.ticks;
            else if (axis == axes.xaxis || axis == axes.x2axis)
                noTicks = canvasWidth / 100;
            else
                noTicks = canvasHeight / 60;
            
            var delta = (axis.max - axis.min) / noTicks;
            var size, generator, unit, formatter, i, magn, norm;

            if (axisOptions.mode == "time") {

                
                function formatDate(d, fmt, monthNames) {
                    var leftPad = function(n) {
                        n = "" + n;
                        return n.length == 1 ? "0" + n : n;
                    };
                    
                    var r = [];
                    var escape = false;
                    if (monthNames == null)
                        monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
                    for (var i = 0; i &lt; fmt.length; ++i) {
                        var c = fmt.charAt(i);
                        
                        if (escape) {
                            switch (c) {
                            case 'h': c = "" + d.getUTCHours(); break;
                            case 'H': c = leftPad(d.getUTCHours()); break;
                            case 'M': c = leftPad(d.getUTCMinutes()); break;
                            case 'S': c = leftPad(d.getUTCSeconds()); break;
                            case 'd': c = "" + d.getUTCDate(); break;
                            case 'm': c = "" + (d.getUTCMonth() + 1); break;
                            case 'y': c = "" + d.getUTCFullYear(); break;
                            case 'b': c = "" + monthNames[d.getUTCMonth()]; break;
                            }
                            r.push(c);
                            escape = false;
                        }
                        else {
                            if (c == "%")
                                escape = true;
                            else
                                r.push(c);
                        }
                    }
                    return r.join("");
                }
                
                    

                var timeUnitSize = {
                    "second": 1000,
                    "minute": 60 * 1000,
                    "hour": 60 * 60 * 1000,
                    "day": 24 * 60 * 60 * 1000,
                    "month": 30 * 24 * 60 * 60 * 1000,
                    "year": 365.2425 * 24 * 60 * 60 * 1000
                };


                var spec = [
                    [1, "second"], [2, "second"], [5, "second"], [10, "second"],
                    [30, "second"], 
                    [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"],
                    [30, "minute"], 
                    [1, "hour"], [2, "hour"], [4, "hour"],
                    [8, "hour"], [12, "hour"],
                    [1, "day"], [2, "day"], [3, "day"],
                    [0.25, "month"], [0.5, "month"], [1, "month"],
                    [2, "month"], [3, "month"], [6, "month"],
                    [1, "year"]
                ];

                var minSize = 0;
                if (axisOptions.minTickSize != null) {
                    if (typeof axisOptions.tickSize == "number")
                        minSize = axisOptions.tickSize;
                    else
                        minSize = axisOptions.minTickSize[0] * timeUnitSize[axisOptions.minTickSize[1]];
                }

                for (i = 0; i &lt; spec.length - 1; ++i)
                    if (delta &lt; (spec[i][0] * timeUnitSize[spec[i][1]]
                                 + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2
                       &amp;&amp; spec[i][0] * timeUnitSize[spec[i][1]] &gt;= minSize)
                        break;
                size = spec[i][0];
                unit = spec[i][1];
                
 
                if (unit == "year") {
                    magn = Math.pow(10, Math.floor(Math.log(delta / timeUnitSize.year) / Math.LN10));
                    norm = (delta / timeUnitSize.year) / magn;
                    if (norm &lt; 1.5)
                        size = 1;
                    else if (norm &lt; 3)
                        size = 2;
                    else if (norm &lt; 7.5)
                        size = 5;
                    else
                        size = 10;

                    size *= magn;
                }

                if (axisOptions.tickSize) {
                    size = axisOptions.tickSize[0];
                    unit = axisOptions.tickSize[1];
                }
                
                generator = function(axis) {
                    var ticks = [],
                        tickSize = axis.tickSize[0], unit = axis.tickSize[1],
                        d = new Date(axis.min);
                    
                    var step = tickSize * timeUnitSize[unit];

                    if (unit == "second")
                        d.setUTCSeconds(floorInBase(d.getUTCSeconds(), tickSize));
                    if (unit == "minute")
                        d.setUTCMinutes(floorInBase(d.getUTCMinutes(), tickSize));
                    if (unit == "hour")
                        d.setUTCHours(floorInBase(d.getUTCHours(), tickSize));
                    if (unit == "month")
                        d.setUTCMonth(floorInBase(d.getUTCMonth(), tickSize));
                    if (unit == "year")
                        d.setUTCFullYear(floorInBase(d.getUTCFullYear(), tickSize));
                    

                    d.setUTCMilliseconds(0);
                    if (step &gt;= timeUnitSize.minute)
                        d.setUTCSeconds(0);
                    if (step &gt;= timeUnitSize.hour)
                        d.setUTCMinutes(0);
                    if (step &gt;= timeUnitSize.day)
                        d.setUTCHours(0);
                    if (step &gt;= timeUnitSize.day * 4)
                        d.setUTCDate(1);
                    if (step &gt;= timeUnitSize.year)
                        d.setUTCMonth(0);


                    var carry = 0, v = Number.NaN, prev;
                    do {
                        prev = v;
                        v = d.getTime();
                        ticks.push({ v: v, label: axis.tickFormatter(v, axis) });
                        if (unit == "month") {
                            if (tickSize &lt; 1) {
         
                                d.setUTCDate(1);
                                var start = d.getTime();
                                d.setUTCMonth(d.getUTCMonth() + 1);
                                var end = d.getTime();
                                d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);
                                carry = d.getUTCHours();
                                d.setUTCHours(0);
                            }
                            else
                                d.setUTCMonth(d.getUTCMonth() + tickSize);
                        }
                        else if (unit == "year") {
                            d.setUTCFullYear(d.getUTCFullYear() + tickSize);
                        }
                        else
                            d.setTime(v + step);
                    } while (v &lt; axis.max &amp;&amp; v != prev);

                    return ticks;
                };

                formatter = function (v, axis) {
                    var d = new Date(v);

       
                    if (axisOptions.timeformat != null)
                        return formatDate(d, axisOptions.timeformat, axisOptions.monthNames);
                    
                    var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];
                    var span = axis.max - axis.min;
                    
                    if (t &lt; timeUnitSize.minute)
                        fmt = "%h:%M:%S";
                    else if (t &lt; timeUnitSize.day) {
                        if (span &lt; 2 * timeUnitSize.day)
                            fmt = "%h:%M";
                        else
                            fmt = "%b %d %h:%M";
                    }
                    else if (t &lt; timeUnitSize.month)
                        fmt = "%b %d";
                    else if (t &lt; timeUnitSize.year) {
                        if (span &lt; timeUnitSize.year)
                            fmt = "%b";
                        else
                            fmt = "%b %y";
                    }
                    else
                        fmt = "%y";
                    
                    return formatDate(d, fmt, axisOptions.monthNames);
                };
            }
            else {
    
                var maxDec = axisOptions.tickDecimals;
                var dec = -Math.floor(Math.log(delta) / Math.LN10);
                if (maxDec != null &amp;&amp; dec &gt; maxDec)
                    dec = maxDec;
                
                magn = Math.pow(10, -dec);
                norm = delta / magn; 
                
                if (norm &lt; 1.5)
                    size = 1;
                else if (norm &lt; 3) {
                    size = 2;
    
                    if (norm &gt; 2.25 &amp;&amp; (maxDec == null || dec + 1 &lt;= maxDec)) {
                        size = 2.5;
                        ++dec;
                    }
                }
                else if (norm &lt; 7.5)
                    size = 5;
                else
                    size = 10;

                size *= magn;
                
                if (axisOptions.minTickSize != null &amp;&amp; size &lt; axisOptions.minTickSize)
                    size = axisOptions.minTickSize;

                if (axisOptions.tickSize != null)
                    size = axisOptions.tickSize;
                
                axis.tickDecimals = Math.max(0, (maxDec != null) ? maxDec : dec);
                
                generator = function (axis) {
                    var ticks = [];

          
                    var start = floorInBase(axis.min, axis.tickSize),
                        i = 0, v = Number.NaN, prev;
                    do {
                        prev = v;
                        v = start + i * axis.tickSize;
                        ticks.push({ v: v, label: axis.tickFormatter(v, axis) });
                        ++i;
                    } while (v &lt; axis.max &amp;&amp; v != prev);
                    return ticks;
                };

                formatter = function (v, axis) {
                    return v.toFixed(axis.tickDecimals);
                };
            }

            axis.tickSize = unit ? [size, unit] : size;
            axis.tickGenerator = generator;
            if ($.isFunction(axisOptions.tickFormatter))
                axis.tickFormatter = function (v, axis) { return "" + axisOptions.tickFormatter(v, axis); };
            else
                axis.tickFormatter = formatter;
            if (axisOptions.labelWidth != null)
                axis.labelWidth = axisOptions.labelWidth;
            if (axisOptions.labelHeight != null)
                axis.labelHeight = axisOptions.labelHeight;
        }
        
        function setTicks(axis, axisOptions) {
            axis.ticks = [];

            if (!axis.used)
                return;
            
            if (axisOptions.ticks == null)
                axis.ticks = axis.tickGenerator(axis);
            else if (typeof axisOptions.ticks == "number") {
                if (axisOptions.ticks &gt; 0)
                    axis.ticks = axis.tickGenerator(axis);
            }
            else if (axisOptions.ticks) {
                var ticks = axisOptions.ticks;

                if ($.isFunction(ticks))
            
                    ticks = ticks({ min: axis.min, max: axis.max });
                
            
                var i, v;
                for (i = 0; i &lt; ticks.length; ++i) {
                    var label = null;
                    var t = ticks[i];
                    if (typeof t == "object") {
                        v = t[0];
                        if (t.length &gt; 1)
                            label = t[1];
                    }
                    else
                        v = t;
                    if (label == null)
                        label = axis.tickFormatter(v, axis);
                    axis.ticks[i] = { v: v, label: label };
                }
            }

            if (axisOptions.autoscaleMargin != null &amp;&amp; axis.ticks.length &gt; 0) {
              
                if (axisOptions.min == null)
                    axis.min = Math.min(axis.min, axis.ticks[0].v);
                if (axisOptions.max == null &amp;&amp; axis.ticks.length &gt; 1)
                    axis.max = Math.min(axis.max, axis.ticks[axis.ticks.length - 1].v);
            }
        }
        
        function setSpacing() {
            function measureXLabels(axis) {
            
                if (axis.labelWidth == null)
                    axis.labelWidth = canvasWidth / 6;

                if (axis.labelHeight == null) {
                    labels = [];
                    for (i = 0; i &lt; axis.ticks.length; ++i) {
                        l = axis.ticks[i].label;
                        if (l)
                            labels.push('&lt;div class="tickLabel" style="float:left;width:' + axis.labelWidth + 'px"&gt;' + l + '&lt;/div&gt;');
                    }
                    
                    axis.labelHeight = 0;
                    if (labels.length &gt; 0) {
                        var dummyDiv = $('&lt;div style="position:absolute;top:-10000px;width:10000px;font-size:smaller"&gt;'
                                         + labels.join("") + '&lt;div style="clear:left"&gt;&lt;/div&gt;&lt;/div&gt;').appendTo(target);
                        axis.labelHeight = dummyDiv.height();
                        dummyDiv.remove();
                    }
                }
            }
            
            function measureYLabels(axis) {
                if (axis.labelWidth == null || axis.labelHeight == null) {
                    var i, labels = [], l;
               
                    for (i = 0; i &lt; axis.ticks.length; ++i) {
                        l = axis.ticks[i].label;
                        if (l)
                            labels.push('&lt;div class="tickLabel"&gt;' + l + '&lt;/div&gt;');
                    }
                    
                    if (labels.length &gt; 0) {
                        var dummyDiv = $('&lt;div style="position:absolute;top:-10000px;font-size:smaller"&gt;'
                                         + labels.join("") + '&lt;/div&gt;').appendTo(target);
                        if (axis.labelWidth == null)
                            axis.labelWidth = dummyDiv.width();
                        if (axis.labelHeight == null)
                            axis.labelHeight = dummyDiv.find("div").height();
                        dummyDiv.remove();
                    }
                    
                    if (axis.labelWidth == null)
                        axis.labelWidth = 0;
                    if (axis.labelHeight == null)
                        axis.labelHeight = 0;
                }
            }
            
            measureXLabels(axes.xaxis);
            measureYLabels(axes.yaxis);
            measureXLabels(axes.x2axis);
            measureYLabels(axes.y2axis);

            var maxOutset = options.grid.borderWidth / 2;
            for (i = 0; i &lt; series.length; ++i)
                maxOutset = Math.max(maxOutset, 2 * (series[i].points.radius + series[i].points.lineWidth/2));

            plotOffset.left = plotOffset.right = plotOffset.top = plotOffset.bottom = maxOutset;

            if (axes.xaxis.labelHeight &gt; 0)
                plotOffset.bottom = Math.max(maxOutset, axes.xaxis.labelHeight + options.grid.labelMargin);
            if (axes.yaxis.labelWidth &gt; 0)
                plotOffset.left = Math.max(maxOutset, axes.yaxis.labelWidth + options.grid.labelMargin);

            if (axes.x2axis.labelHeight &gt; 0)
                plotOffset.top = Math.max(maxOutset, axes.x2axis.labelHeight + options.grid.labelMargin);
            
            if (axes.y2axis.labelWidth &gt; 0)
                plotOffset.right = Math.max(maxOutset, axes.y2axis.labelWidth + options.grid.labelMargin);

            plotWidth = canvasWidth - plotOffset.left - plotOffset.right;
            plotHeight = canvasHeight - plotOffset.bottom - plotOffset.top;

 
            axes.xaxis.scale = plotWidth / (axes.xaxis.max - axes.xaxis.min);
            axes.yaxis.scale = plotHeight / (axes.yaxis.max - axes.yaxis.min);
            axes.x2axis.scale = plotWidth / (axes.x2axis.max - axes.x2axis.min);
            axes.y2axis.scale = plotHeight / (axes.y2axis.max - axes.y2axis.min);
        }
        
        function draw() {
            drawGrid();
            for (var i = 0; i &lt; series.length; i++) {
                drawSeries(series[i]);
            }
        }

        function extractRange(ranges, coord) {
            var firstAxis = coord + "axis",
                secondaryAxis = coord + "2axis",
                axis, from, to, reverse;

            if (ranges[firstAxis]) {
                axis = axes[firstAxis];
                from = ranges[firstAxis].from;
                to = ranges[firstAxis].to;
            }
            else if (ranges[secondaryAxis]) {
                axis = axes[secondaryAxis];
                from = ranges[secondaryAxis].from;
                to = ranges[secondaryAxis].to;
            }
            else {

                axis = axes[firstAxis];
                from = ranges[coord + "1"];
                to = ranges[coord + "2"];
            }


            if (from != null &amp;&amp; to != null &amp;&amp; from &gt; to)
                return { from: to, to: from, axis: axis };
            
            return { from: from, to: to, axis: axis };
        }
        
        function drawGrid() {
            var i;
            
            ctx.save();
            ctx.clearRect(0, 0, canvasWidth, canvasHeight);
            ctx.translate(plotOffset.left, plotOffset.top);

  
            if (options.grid.backgroundColor) {
                ctx.fillStyle = options.grid.backgroundColor;
                ctx.fillRect(0, 0, plotWidth, plotHeight);
            }


            if (options.grid.markings) {
                var markings = options.grid.markings;
                if ($.isFunction(markings))
      
                    markings = markings({ xmin: axes.xaxis.min, xmax: axes.xaxis.max, ymin: axes.yaxis.min, ymax: axes.yaxis.max, xaxis: axes.xaxis, yaxis: axes.yaxis, x2axis: axes.x2axis, y2axis: axes.y2axis });

                for (i = 0; i &lt; markings.length; ++i) {
                    var m = markings[i],
                        xrange = extractRange(m, "x"),
                        yrange = extractRange(m, "y");

        
                    if (xrange.from == null)
                        xrange.from = xrange.axis.min;
                    if (xrange.to == null)
                        xrange.to = xrange.axis.max;
                    if (yrange.from == null)
                        yrange.from = yrange.axis.min;
                    if (yrange.to == null)
                        yrange.to = yrange.axis.max;

                    if (xrange.to &lt; xrange.axis.min || xrange.from &gt; xrange.axis.max ||
                        yrange.to &lt; yrange.axis.min || yrange.from &gt; yrange.axis.max)
                        continue;

                    xrange.from = Math.max(xrange.from, xrange.axis.min);
                    xrange.to = Math.min(xrange.to, xrange.axis.max);
                    yrange.from = Math.max(yrange.from, yrange.axis.min);
                    yrange.to = Math.min(yrange.to, yrange.axis.max);

                    if (xrange.from == xrange.to &amp;&amp; yrange.from == yrange.to)
                        continue;

          
                    xrange.from = xrange.axis.p2c(xrange.from);
                    xrange.to = xrange.axis.p2c(xrange.to);
                    yrange.from = yrange.axis.p2c(yrange.from);
                    yrange.to = yrange.axis.p2c(yrange.to);
                    
                    if (xrange.from == xrange.to || yrange.from == yrange.to) {
                  
                        ctx.strokeStyle = m.color || options.grid.markingsColor;
                        ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth;
                        ctx.moveTo(Math.floor(xrange.from), Math.floor(yrange.from));
                        ctx.lineTo(Math.floor(xrange.to), Math.floor(yrange.to));
                        ctx.stroke();
                    }
                    else {
                
                        ctx.fillStyle = m.color || options.grid.markingsColor;
                        ctx.fillRect(Math.floor(xrange.from),
                                     Math.floor(yrange.to),
                                     Math.floor(xrange.to - xrange.from),
                                     Math.floor(yrange.from - yrange.to));
                    }
                }
            }
            
         
            ctx.lineWidth = 1;
            ctx.strokeStyle = options.grid.tickColor;
            ctx.beginPath();
            var v, axis = axes.xaxis;
            for (i = 0; i &lt; axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v &lt;= axis.min || v &gt;= axes.xaxis.max)
                    continue;   

                ctx.moveTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, 0);
                ctx.lineTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, plotHeight);
            }

            axis = axes.yaxis;
            for (i = 0; i &lt; axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v &lt;= axis.min || v &gt;= axis.max)
                    continue;

                ctx.moveTo(0, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
                ctx.lineTo(plotWidth, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
            }

            axis = axes.x2axis;
            for (i = 0; i &lt; axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v &lt;= axis.min || v &gt;= axis.max)
                    continue;
    
                ctx.moveTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, -5);
                ctx.lineTo(Math.floor(axis.p2c(v)) + ctx.lineWidth/2, 5);
            }

            axis = axes.y2axis;
            for (i = 0; i &lt; axis.ticks.length; ++i) {
                v = axis.ticks[i].v;
                if (v &lt;= axis.min || v &gt;= axis.max)
                    continue;

                ctx.moveTo(plotWidth-5, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
                ctx.lineTo(plotWidth+5, Math.floor(axis.p2c(v)) + ctx.lineWidth/2);
            }
            
            ctx.stroke();
            
            if (options.grid.borderWidth) {
            
                ctx.lineWidth = options.grid.borderWidth;
                ctx.strokeStyle = options.grid.color;
                ctx.lineJoin = "round";
                ctx.strokeRect(0, 0, plotWidth, plotHeight);
            }

            ctx.restore();
        }
        
        function insertLabels() {
            target.find(".tickLabels").remove();
            
            var html = '&lt;div class="tickLabels" style="font-size:smaller;color:' + options.grid.color + '"&gt;';

            function addLabels(axis, labelGenerator) {
                for (var i = 0; i &lt; axis.ticks.length; ++i) {
                    var tick = axis.ticks[i];
                    if (!tick.label || tick.v &lt; axis.min || tick.v &gt; axis.max)
                        continue;
                    html += labelGenerator(tick, axis);
                }
            }
            
            addLabels(axes.xaxis, function (tick, axis) {
                return '&lt;div style="position:absolute;top:' + (plotOffset.top + plotHeight + options.grid.labelMargin) + 'px;left:' + (plotOffset.left + axis.p2c(tick.v) - axis.labelWidth/2) + 'px;width:' + axis.labelWidth + 'px;text-align:center" class="tickLabel"&gt;' + tick.label + "&lt;/div&gt;";
            });
            
            
            addLabels(axes.yaxis, function (tick, axis) {
                return '&lt;div style="position:absolute;top:' + (plotOffset.top + axis.p2c(tick.v) - axis.labelHeight/2) + 'px;right:' + (plotOffset.right + plotWidth + options.grid.labelMargin) + 'px;width:' + axis.labelWidth + 'px;text-align:right" class="tickLabel"&gt;' + tick.label + "&lt;/div&gt;";
            });
            
            addLabels(axes.x2axis, function (tick, axis) {
                return '&lt;div style="position:absolute;bottom:' + (plotOffset.bottom + plotHeight + options.grid.labelMargin) + 'px;left:' + (plotOffset.left + axis.p2c(tick.v) - axis.labelWidth/2) + 'px;width:' + axis.labelWidth + 'px;text-align:center" class="tickLabel"&gt;' + tick.label + "&lt;/div&gt;";
            });
            
            addLabels(axes.y2axis, function (tick, axis) {
                return '&lt;div style="position:absolute;top:' + (plotOffset.top + axis.p2c(tick.v) - axis.labelHeight/2) + 'px;left:' + (plotOffset.left + plotWidth + options.grid.labelMargin) +'px;width:' + axis.labelWidth + 'px;text-align:left" class="tickLabel"&gt;' + tick.label + "&lt;/div&gt;";
            });

            html += '&lt;/div&gt;';
            
            target.append(html);
        }

        function drawSeries(series) {
            if (series.lines.show || (!series.bars.show &amp;&amp; !series.points.show))
                drawSeriesLines(series);
            if (series.bars.show)
                drawSeriesBars(series);
            if (series.points.show)
                drawSeriesPoints(series);
        }
        
        function drawSeriesLines(series) {
            function plotLine(data, offset, axisx, axisy) {
                var prev, cur = null, drawx = null, drawy = null;
                
                ctx.beginPath();
                for (var i = 0; i &lt; data.length; ++i) {
                    prev = cur;
                    cur = data[i];

                    if (prev == null || cur == null)
                        continue;
                    
                    var x1 = prev[0], y1 = prev[1],
                        x2 = cur[0], y2 = cur[1];

             
                    if (y1 &lt;= y2 &amp;&amp; y1 &lt; axisy.min) {
                        if (y2 &lt; axisy.min)
                            continue; 
                    
                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.min;
                    }
                    else if (y2 &lt;= y1 &amp;&amp; y2 &lt; axisy.min) {
                        if (y1 &lt; axisy.min)
                            continue;
                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.min;
                    }

                
                    if (y1 &gt;= y2 &amp;&amp; y1 &gt; axisy.max) {
                        if (y2 &gt; axisy.max)
                            continue;
                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.max;
                    }
                    else if (y2 &gt;= y1 &amp;&amp; y2 &gt; axisy.max) {
                        if (y1 &gt; axisy.max)
                            continue;
                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.max;
                    }

                 
                    if (x1 &lt;= x2 &amp;&amp; x1 &lt; axisx.min) {
                        if (x2 &lt; axisx.min)
                            continue;
                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.min;
                    }
                    else if (x2 &lt;= x1 &amp;&amp; x2 &lt; axisx.min) {
                        if (x1 &lt; axisx.min)
                            continue;
                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.min;
                    }

               
                    if (x1 &gt;= x2 &amp;&amp; x1 &gt; axisx.max) {
                        if (x2 &gt; axisx.max)
                            continue;
                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.max;
                    }
                    else if (x2 &gt;= x1 &amp;&amp; x2 &gt; axisx.max) {
                        if (x1 &gt; axisx.max)
                            continue;
                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.max;
                    }

                    if (drawx != axisx.p2c(x1) || drawy != axisy.p2c(y1) + offset)
                        ctx.moveTo(axisx.p2c(x1), axisy.p2c(y1) + offset);
                    
                    drawx = axisx.p2c(x2);
                    drawy = axisy.p2c(y2) + offset;
                    ctx.lineTo(drawx, drawy);
                }
                ctx.stroke();
            }

            function plotLineArea(data, axisx, axisy) {
                var prev, cur = null;
                
                var bottom = Math.min(Math.max(0, axisy.min), axisy.max);
                var top, lastX = 0;

                var areaOpen = false;
                
                for (var i = 0; i &lt; data.length; ++i) {
                    prev = cur;
                    cur = data[i];

                    if (areaOpen &amp;&amp; prev != null &amp;&amp; cur == null) {
                   
                        ctx.lineTo(axisx.p2c(lastX), axisy.p2c(bottom));
                        ctx.fill();
                        areaOpen = false;
                        continue;
                    }

                    if (prev == null || cur == null)
                        continue;
                        
                    var x1 = prev[0], y1 = prev[1],
                        x2 = cur[0], y2 = cur[1];

                  
                    if (x1 &lt;= x2 &amp;&amp; x1 &lt; axisx.min) {
                        if (x2 &lt; axisx.min)
                            continue;
                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.min;
                    }
                    else if (x2 &lt;= x1 &amp;&amp; x2 &lt; axisx.min) {
                        if (x1 &lt; axisx.min)
                            continue;
                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.min;
                    }

                
                    if (x1 &gt;= x2 &amp;&amp; x1 &gt; axisx.max) {
                        if (x2 &gt; axisx.max)
                            continue;
                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x1 = axisx.max;
                    }
                    else if (x2 &gt;= x1 &amp;&amp; x2 &gt; axisx.max) {
                        if (x1 &gt; axisx.max)
                            continue;
                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;
                        x2 = axisx.max;
                    }

                    if (!areaOpen) {
               
                        ctx.beginPath();
                        ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));
                        areaOpen = true;
                    }
                    
                  
                    if (y1 &gt;= axisy.max &amp;&amp; y2 &gt;= axisy.max) {
                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));
                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));
                        continue;
                    }
                    else if (y1 &lt;= axisy.min &amp;&amp; y2 &lt;= axisy.min) {
                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));
                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));
                        continue;
                    }
                    
                
                    var x1old = x1, x2old = x2;

                 
                    if (y1 &lt;= y2 &amp;&amp; y1 &lt; axisy.min &amp;&amp; y2 &gt;= axisy.min) {
                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.min;
                    }
                    else if (y2 &lt;= y1 &amp;&amp; y2 &lt; axisy.min &amp;&amp; y1 &gt;= axisy.min) {
                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.min;
                    }

                  
                    if (y1 &gt;= y2 &amp;&amp; y1 &gt; axisy.max &amp;&amp; y2 &lt;= axisy.max) {
                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y1 = axisy.max;
                    }
                    else if (y2 &gt;= y1 &amp;&amp; y2 &gt; axisy.max &amp;&amp; y1 &lt;= axisy.max) {
                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;
                        y2 = axisy.max;
                    }


               
                    if (x1 != x1old) {
                        if (y1 &lt;= axisy.min)
                            top = axisy.min;
                        else
                            top = axisy.max;
                        
                        ctx.lineTo(axisx.p2c(x1old), axisy.p2c(top));
                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(top));
                    }
                    
             
                    ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));
                    ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));

                 
                    if (x2 != x2old) {
                        if (y2 &lt;= axisy.min)
                            top = axisy.min;
                        else
                            top = axisy.max;
                        
                        ctx.lineTo(axisx.p2c(x2old), axisy.p2c(top));
                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(top));
                    }

                    lastX = Math.max(x2, x2old);
                }

                if (areaOpen) {
                    ctx.lineTo(axisx.p2c(lastX), axisy.p2c(bottom));
                    ctx.fill();
                }
            }
            
            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);
            ctx.lineJoin = "round";

            var lw = series.lines.lineWidth;
            var sw = series.shadowSize;
        
            if (sw &gt; 0) {
              
                ctx.lineWidth = sw / 2;
                ctx.strokeStyle = "rgba(0,0,0,0.1)";
                plotLine(series.data, lw/2 + sw/2 + ctx.lineWidth/2, series.xaxis, series.yaxis);

                ctx.lineWidth = sw / 2;
                ctx.strokeStyle = "rgba(0,0,0,0.2)";
                plotLine(series.data, lw/2 + ctx.lineWidth/2, series.xaxis, series.yaxis);
            }

            ctx.lineWidth = lw;
            ctx.strokeStyle = series.color;
            setFillStyle(series.lines, series.color);
            if (series.lines.fill)
                plotLineArea(series.data, series.xaxis, series.yaxis);
            plotLine(series.data, 0, series.xaxis, series.yaxis);
            ctx.restore();
        }

        function drawSeriesPoints(series) {
            function plotPoints(data, radius, fill, axisx, axisy) {
                for (var i = 0; i &lt; data.length; ++i) {
                    if (data[i] == null)
                        continue;
                    
                    var x = data[i][0], y = data[i][1];
                    if (x &lt; axisx.min || x &gt; axisx.max || y &lt; axisy.min || y &gt; axisy.max)
                        continue;
                    
                    ctx.beginPath();
                    ctx.arc(axisx.p2c(x), axisy.p2c(y), radius, 0, 2 * Math.PI, true);
                    if (fill)
                        ctx.fill();
                    ctx.stroke();
                }
            }

            function plotPointShadows(data, offset, radius, axisx, axisy) {
                for (var i = 0; i &lt; data.length; ++i) {
                    if (data[i] == null)
                        continue;
                    
                    var x = data[i][0], y = data[i][1];
                    if (x &lt; axisx.min || x &gt; axisx.max || y &lt; axisy.min || y &gt; axisy.max)
                        continue;
                    ctx.beginPath();
                    ctx.arc(axisx.p2c(x), axisy.p2c(y) + offset, radius, 0, Math.PI, false);
                    ctx.stroke();
                }
            }
            
            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);

            var lw = series.lines.lineWidth;
            var sw = series.shadowSize;
            if (sw &gt; 0) {
            
                ctx.lineWidth = sw / 2;
                ctx.strokeStyle = "rgba(0,0,0,0.1)";
                plotPointShadows(series.data, sw/2 + ctx.lineWidth/2,
                                 series.points.radius, series.xaxis, series.yaxis);

                ctx.lineWidth = sw / 2;
                ctx.strokeStyle = "rgba(0,0,0,0.2)";
                plotPointShadows(series.data, ctx.lineWidth/2,
                                 series.points.radius, series.xaxis, series.yaxis);
            }

            ctx.lineWidth = series.points.lineWidth;
            ctx.strokeStyle = series.color;
            setFillStyle(series.points, series.color);
            plotPoints(series.data, series.points.radius, series.points.fill,
                       series.xaxis, series.yaxis);
            ctx.restore();
        }

        function drawBar(x, y, barLeft, barRight, offset, fill, axisx, axisy, c) {
            var drawLeft = true, drawRight = true,
                drawTop = true, drawBottom = false,
                left = x + barLeft, right = x + barRight,
                bottom = 0, top = y;

          
            if (top &lt; bottom) {
                top = 0;
                bottom = y;
                drawBottom = true;
                drawTop = false;
            }
            
          
            if (right &lt; axisx.min || left &gt; axisx.max ||
                top &lt; axisy.min || bottom &gt; axisy.max)
                return;
            
            if (left &lt; axisx.min) {
                left = axisx.min;
                drawLeft = false;
            }

            if (right &gt; axisx.max) {
                right = axisx.max;
                drawRight = false;
            }

            if (bottom &lt; axisy.min) {
                bottom = axisy.min;
                drawBottom = false;
            }
            
            if (top &gt; axisy.max) {
                top = axisy.max;
                drawTop = false;
            }

           
            if (fill) {
                c.beginPath();
                c.moveTo(axisx.p2c(left), axisy.p2c(bottom) + offset);
                c.lineTo(axisx.p2c(left), axisy.p2c(top) + offset);
                c.lineTo(axisx.p2c(right), axisy.p2c(top) + offset);
                c.lineTo(axisx.p2c(right), axisy.p2c(bottom) + offset);
                c.fill();
            }

            if (drawLeft || drawRight || drawTop || drawBottom) {
                c.beginPath();
                left = axisx.p2c(left);
                bottom = axisy.p2c(bottom);
                right = axisx.p2c(right);
                top = axisy.p2c(top);
                
                c.moveTo(left, bottom + offset);
                if (drawLeft)
                    c.lineTo(left, top + offset);
                else
                    c.moveTo(left, top + offset);
                if (drawTop)
                    c.lineTo(right, top + offset);
                else
                    c.moveTo(right, top + offset);
                if (drawRight)
                    c.lineTo(right, bottom + offset);
                else
                    c.moveTo(right, bottom + offset);
                if (drawBottom)
                    c.lineTo(left, bottom + offset);
                else
                    c.moveTo(left, bottom + offset);
                c.stroke();
            }
        }
        
        function drawSeriesBars(series) {
            function plotBars(data, barLeft, barRight, offset, fill, axisx, axisy) {
                for (var i = 0; i &lt; data.length; i++) {
                    if (data[i] == null)
                        continue;
                    drawBar(data[i][0], data[i][1], barLeft, barRight, offset, fill, axisx, axisy, ctx);
                }
            }

            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);
            ctx.lineJoin = "round";

            ctx.lineWidth = series.bars.lineWidth;
            ctx.strokeStyle = series.color;
            setFillStyle(series.bars, series.color);
            var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2;
            plotBars(series.data, barLeft, barLeft + series.bars.barWidth, 0, series.bars.fill, series.xaxis, series.yaxis);
            ctx.restore();
        }

        function setFillStyle(obj, seriesColor) {
            var fill = obj.fill;
            if (!fill)
                return;
            
            if (obj.fillColor)
                ctx.fillStyle = obj.fillColor;
            else {
                var c = parseColor(seriesColor);
                c.a = typeof fill == "number" ? fill : 0.4;
                c.normalize();
                ctx.fillStyle = c.toString();
            }
        }
        
        function insertLegend() {
            target.find(".legend").remove();

            if (!options.legend.show)
                return;
            
            var fragments = [];
            var rowStarted = false;
            for (i = 0; i &lt; series.length; ++i) {
                if (!series[i].label)
                    continue;
                
                if (i % options.legend.noColumns == 0) {
                    if (rowStarted)
                        fragments.push('&lt;/tr&gt;');
                    fragments.push('&lt;tr&gt;');
                    rowStarted = true;
                }

                var label = series[i].label;
                if (options.legend.labelFormatter != null)
                    label = options.legend.labelFormatter(label);
                
                fragments.push(
                    '&lt;td class="legendColorBox"&gt;&lt;div style="border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px"&gt;&lt;div style="width:14px;height:10px;background-color:' + series[i].color + ';overflow:hidden"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;' +
                    '&lt;td class="legendLabel"&gt;' + label + '&lt;/td&gt;');
            }
            if (rowStarted)
                fragments.push('&lt;/tr&gt;');
            
            if (fragments.length == 0)
                return;

            var table = '&lt;table style="font-size:smaller;color:' + options.grid.color + '"&gt;' + fragments.join("") + '&lt;/table&gt;';
            if (options.legend.container != null)
                options.legend.container.html(table);
            else {
                var pos = "";
                var p = options.legend.position, m = options.legend.margin;
                if (p.charAt(0) == "n")
                    pos += 'top:' + (m + plotOffset.top) + 'px;';
                else if (p.charAt(0) == "s")
                    pos += 'bottom:' + (m + plotOffset.bottom) + 'px;';
                if (p.charAt(1) == "e")
                    pos += 'right:' + (m + plotOffset.right) + 'px;';
                else if (p.charAt(1) == "w")
                    pos += 'left:' + (m + plotOffset.left) + 'px;';
                var legend = $('&lt;div class="legend"&gt;' + table.replace('style="', 'style="position:absolute;' + pos +';') + '&lt;/div&gt;').appendTo(target);
                if (options.legend.backgroundOpacity != 0.0) {
        
                    var c = options.legend.backgroundColor;
                    if (c == null) {
                        var tmp;
                        if (options.grid.backgroundColor)
                            tmp = options.grid.backgroundColor;
                        else
                            tmp = extractColor(legend);
                        c = parseColor(tmp).adjust(null, null, null, 1).toString();
                    }
                    var div = legend.children();
                    $('&lt;div style="position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';"&gt; &lt;/div&gt;').prependTo(legend).css('opacity', options.legend.backgroundOpacity);
                    
                }
            }
        }



        
        var lastMousePos = { pageX: null, pageY: null },
            selection = {
                first: { x: -1, y: -1}, second: { x: -1, y: -1},
                show: false, active: false },
            highlights = [],
            clickIsMouseUp = false,
            redrawTimeout = null,
            hoverTimeout = null;
  
        function findNearbyItem(mouseX, mouseY) {
            var maxDistance = options.grid.mouseActiveRadius,
                lowestDistance = maxDistance * maxDistance + 1,
                item = null, foundPoint = false;

            function result(i, j) {
                return { datapoint: series[i].data[j],
                         dataIndex: j,
                         series: series[i],
                         seriesIndex: i };
            }
            
            for (var i = 0; i &lt; series.length; ++i) {
                var data = series[i].data,
                    axisx = series[i].xaxis,
                    axisy = series[i].yaxis,
                
              
                    mx = axisx.c2p(mouseX),
                    my = axisy.c2p(mouseY),
                    maxx = maxDistance / axisx.scale,
                    maxy = maxDistance / axisy.scale,
                    checkbar = series[i].bars.show,
                    checkpoint = !(series[i].bars.show &amp;&amp; !(series[i].lines.show || series[i].points.show)),
                    barLeft = series[i].bars.align == "left" ? 0 : -series[i].bars.barWidth/2,
                    barRight = barLeft + series[i].bars.barWidth;
                for (var j = 0; j &lt; data.length; ++j) {
                    if (data[j] == null)
                        continue;

                    var x = data[j][0], y = data[j][1];
  
                    if (checkbar) {
                      
                        if (!foundPoint &amp;&amp; mx &gt;= x + barLeft &amp;&amp;
                            mx &lt;= x + barRight &amp;&amp;
                            my &gt;= Math.min(0, y) &amp;&amp; my &lt;= Math.max(0, y))
                            item = result(i, j);
                    }
 
                    if (checkpoint) {
                      
                        if ((x - mx &gt; maxx || x - mx &lt; -maxx) ||
                            (y - my &gt; maxy || y - my &lt; -maxy))
                            continue;

                        
                        var dx = Math.abs(axisx.p2c(x) - mouseX),
                            dy = Math.abs(axisy.p2c(y) - mouseY),
                            dist = dx * dx + dy * dy;
                        if (dist &lt; lowestDistance) {
                            lowestDistance = dist;
                            foundPoint = true;
                            item = result(i, j);
                        }
                    }
                }
            }

            return item;
        }

        function onMouseMove(ev) {
        
            var e = ev || window.event;
            if (e.pageX == null &amp;&amp; e.clientX != null) {
                var de = document.documentElement, b = document.body;
                lastMousePos.pageX = e.clientX + (de &amp;&amp; de.scrollLeft || b.scrollLeft || 0);
                lastMousePos.pageY = e.clientY + (de &amp;&amp; de.scrollTop || b.scrollTop || 0);
            }
            else {
                lastMousePos.pageX = e.pageX;
                lastMousePos.pageY = e.pageY;
            }
            
            if (options.grid.hoverable &amp;&amp; !hoverTimeout)
                hoverTimeout = setTimeout(onHover, 100);

            if (selection.active)
                updateSelection(lastMousePos);
        }
        
        function onMouseDown(e) {
            if (e.which != 1) 
                return;
            
           
            document.body.focus();

            if (document.onselectstart !== undefined &amp;&amp; workarounds.onselectstart == null) {
                workarounds.onselectstart = document.onselectstart;
                document.onselectstart = function () { return false; };
            }
            if (document.ondrag !== undefined &amp;&amp; workarounds.ondrag == null) {
                workarounds.ondrag = document.ondrag;
                document.ondrag = function () { return false; };
            }
            
            setSelectionPos(selection.first, e);
                
            lastMousePos.pageX = null;
            selection.active = true;
            $(document).one("mouseup", onSelectionMouseUp);
        }

        function onClick(e) {
            if (clickIsMouseUp) {
                clickIsMouseUp = false;
                return;
            }

            triggerClickHoverEvent("plotclick", e);
        }
        
        function onHover() {
            triggerClickHoverEvent("plothover", lastMousePos);
            hoverTimeout = null;
        }

  
        function triggerClickHoverEvent(eventname, event) {
            var offset = eventHolder.offset(),
                pos = { pageX: event.pageX, pageY: event.pageY },
                canvasX = event.pageX - offset.left - plotOffset.left,
                canvasY = event.pageY - offset.top - plotOffset.top;

            if (axes.xaxis.used)
                pos.x = axes.xaxis.c2p(canvasX);
            if (axes.yaxis.used)
                pos.y = axes.yaxis.c2p(canvasY);
            if (axes.x2axis.used)
                pos.x2 = axes.x2axis.c2p(canvasX);
            if (axes.y2axis.used)
                pos.y2 = axes.y2axis.c2p(canvasY);

            var item = findNearbyItem(canvasX, canvasY);

            if (item) {
            
                item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left);
                item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top);

                    
            }

            if (options.grid.autoHighlight) {
                for (var i = 0; i &lt; highlights.length; ++i) {
                    var h = highlights[i];
                    if (h.auto &amp;&amp;
                        !(item &amp;&amp; h.series == item.series &amp;&amp; h.point == item.datapoint))
                        unhighlight(h.series, h.point);
                }
                
                if (item)
                    highlight(item.series, item.datapoint, true);
            }
            
            target.trigger(eventname, [ pos, item ]);
        }

        function triggerRedrawOverlay() {
            if (!redrawTimeout)
                redrawTimeout = setTimeout(redrawOverlay, 50);
        }

        function redrawOverlay() {
            redrawTimeout = null;

         
            octx.save();
            octx.clearRect(0, 0, canvasWidth, canvasHeight);
            octx.translate(plotOffset.left, plotOffset.top);
            
            var i, hi; 
            for (i = 0; i &lt; highlights.length; ++i) {
                hi = highlights[i];

                if (hi.series.bars.show)
                    drawBarHighlight(hi.series, hi.point);
                else
                    drawPointHighlight(hi.series, hi.point);
            }
            octx.restore();

        
            if (selection.show &amp;&amp; selectionIsSane()) {
                octx.strokeStyle = parseColor(options.selection.color).scale(null, null, null, 0.8).toString();
                octx.lineWidth = 1;
                ctx.lineJoin = "round";
                octx.fillStyle = parseColor(options.selection.color).scale(null, null, null, 0.4).toString();
                
                var x = Math.min(selection.first.x, selection.second.x),
                    y = Math.min(selection.first.y, selection.second.y),
                    w = Math.abs(selection.second.x - selection.first.x),
                    h = Math.abs(selection.second.y - selection.first.y);
                
                octx.fillRect(x + plotOffset.left, y + plotOffset.top, w, h);
                octx.strokeRect(x + plotOffset.left, y + plotOffset.top, w, h);
            }
        }
        
        function highlight(s, point, auto) {
            if (typeof s == "number")
                s = series[s];

            if (typeof point == "number")
                point = s.data[point];

            var i = indexOfHighlight(s, point);
            if (i == -1) {
                highlights.push({ series: s, point: point, auto: auto });

                triggerRedrawOverlay();
            }
            else if (!auto)
                highlights[i].auto = false;
        }
            
        function unhighlight(s, point) {
            if (typeof s == "number")
                s = series[s];

            if (typeof point == "number")
                point = s.data[point];

            var i = indexOfHighlight(s, point);
            if (i != -1) {
                highlights.splice(i, 1);

                triggerRedrawOverlay();
            }
        }
        
        function indexOfHighlight(s, p) {
            for (var i = 0; i &lt; highlights.length; ++i) {
                var h = highlights[i];
                if (h.series == s &amp;&amp; h.point[0] == p[0]
                    &amp;&amp; h.point[1] == p[1])
                    return i;
            }
            return -1;
        }
        
        function drawPointHighlight(series, point) {
            var x = point[0], y = point[1],
                axisx = series.xaxis, axisy = series.yaxis;
            
            if (x &lt; axisx.min || x &gt; axisx.max || y &lt; axisy.min || y &gt; axisy.max)
                return;
            
            var pointRadius = series.points.radius + series.points.lineWidth / 2;
            octx.lineWidth = pointRadius;
            octx.strokeStyle = parseColor(series.color).scale(1, 1, 1, 0.5).toString();
            var radius = 1.5 * pointRadius;
            octx.beginPath();
            octx.arc(axisx.p2c(x), axisy.p2c(y), radius, 0, 2 * Math.PI, true);
            octx.stroke();
        }

        function drawBarHighlight(series, point) {
            octx.lineJoin = "round";
            octx.lineWidth = series.bars.lineWidth;
            octx.strokeStyle = parseColor(series.color).scale(1, 1, 1, 0.5).toString();
            octx.fillStyle = parseColor(series.color).scale(1, 1, 1, 0.5).toString();
            var barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2;
            drawBar(point[0], point[1], barLeft, barLeft + series.bars.barWidth,
                    0, true, series.xaxis, series.yaxis, octx);
        }
        
        function triggerSelectedEvent() {
            var x1 = Math.min(selection.first.x, selection.second.x),
                x2 = Math.max(selection.first.x, selection.second.x),
                y1 = Math.max(selection.first.y, selection.second.y),
                y2 = Math.min(selection.first.y, selection.second.y);

            var r = {};
            if (axes.xaxis.used)
                r.xaxis = { from: axes.xaxis.c2p(x1), to: axes.xaxis.c2p(x2) };
            if (axes.x2axis.used)
                r.x2axis = { from: axes.x2axis.c2p(x1), to: axes.x2axis.c2p(x2) };
            if (axes.yaxis.used)
                r.yaxis = { from: axes.yaxis.c2p(y1), to: axes.yaxis.c2p(y2) };
            if (axes.y2axis.used)
                r.yaxis = { from: axes.y2axis.c2p(y1), to: axes.y2axis.c2p(y2) };
            
            target.trigger("plotselected", [ r ]);

            if (axes.xaxis.used &amp;&amp; axes.yaxis.used)
                target.trigger("selected", [ { x1: r.xaxis.from, y1: r.yaxis.from, x2: r.xaxis.to, y2: r.yaxis.to } ]);
        }
        
        function onSelectionMouseUp(e) {
        
            if (document.onselectstart !== undefined)
                document.onselectstart = workarounds.onselectstart;
            if (document.ondrag !== undefined)
                document.ondrag = workarounds.ondrag;
            
       
            selection.active = false;
            updateSelection(e);
            
            if (selectionIsSane()) {
                triggerSelectedEvent();
                clickIsMouseUp = true;
            }
            
            return false;
        }

        function setSelectionPos(pos, e) {
            var offset = eventHolder.offset();
            if (options.selection.mode == "y") {
                if (pos == selection.first)
                    pos.x = 0;
                else
                    pos.x = plotWidth;
            }
            else {
                pos.x = e.pageX - offset.left - plotOffset.left;
                pos.x = Math.min(Math.max(0, pos.x), plotWidth);
            }

            if (options.selection.mode == "x") {
                if (pos == selection.first)
                    pos.y = 0;
                else
                    pos.y = plotHeight;
            }
            else {
                pos.y = e.pageY - offset.top - plotOffset.top;
                pos.y = Math.min(Math.max(0, pos.y), plotHeight);
            }
        }
        
        function updateSelection(pos) {
            if (pos.pageX == null)
                return;
            
            setSelectionPos(selection.second, pos);
            if (selectionIsSane()) {
                selection.show = true;
                triggerRedrawOverlay();
            }
            else
                clearSelection();
        }

        function clearSelection() {
            if (selection.show) {
                selection.show = false;
                triggerRedrawOverlay();
            }
        }

        function setSelection(ranges, preventEvent) {
            var range;
            
            if (options.selection.mode == "y") {
                selection.first.x = 0;
                selection.second.x = plotWidth;
            }
            else {
                range = extractRange(ranges, "x");
                
                selection.first.x = range.axis.p2c(range.from);
                selection.second.x = range.axis.p2c(range.to);
            }
            
            if (options.selection.mode == "x") {
                selection.first.y = 0;
                selection.second.y = plotHeight;
            }
            else {
                range = extractRange(ranges, "y");
                
                selection.first.y = range.axis.p2c(range.from);
                selection.second.y = range.axis.p2c(range.to);
            }

            selection.show = true;
            triggerRedrawOverlay();
            if (!preventEvent)
                triggerSelectedEvent();
        }
        
        function selectionIsSane() {
            var minSize = 5;
            return Math.abs(selection.second.x - selection.first.x) &gt;= minSize &amp;&amp;
                Math.abs(selection.second.y - selection.first.y) &gt;= minSize;
        }
    }
    
    $.plot = function(target, data, options) {
        var plot = new Plot(target, data, options);

        return plot;
    };
    

    function floorInBase(n, base) {
        return base * Math.floor(n / base);
    }
    
    function clamp(min, value, max) {
        if (value &lt; min)
            return value;
        else if (value &gt; max)
            return max;
        else
            return value;
    }
    

    function Color (r, g, b, a) {
       
        var rgba = ['r','g','b','a'];
        var x = 4; 
       
        while (-1&lt;--x) {
            this[rgba[x]] = arguments[x] || ((x==3) ? 1.0 : 0);
        }
       
        this.toString = function() {
            if (this.a &gt;= 1.0) {
                return "rgb("+[this.r,this.g,this.b].join(",")+")";
            } else {
                return "rgba("+[this.r,this.g,this.b,this.a].join(",")+")";
            }
        };

        this.scale = function(rf, gf, bf, af) {
            x = 4;
            while (-1&lt;--x) {
                if (arguments[x] != null)
                    this[rgba[x]] *= arguments[x];
            }
            return this.normalize();
        };

        this.adjust = function(rd, gd, bd, ad) {
            x = 4;
            while (-1&lt;--x) {
                if (arguments[x] != null)
                    this[rgba[x]] += arguments[x];
            }
            return this.normalize();
        };

        this.clone = function() {
            return new Color(this.r, this.b, this.g, this.a);
        };

        var limit = function(val,minVal,maxVal) {
            return Math.max(Math.min(val, maxVal), minVal);
        };

        this.normalize = function() {
            this.r = limit(parseInt(this.r), 0, 255);
            this.g = limit(parseInt(this.g), 0, 255);
            this.b = limit(parseInt(this.b), 0, 255);
            this.a = limit(this.a, 0, 1);
            return this;
        };

        this.normalize();
    }
    
    var lookupColors = {
        aqua:[0,255,255],
        azure:[240,255,255],
        beige:[245,245,220],
        black:[0,0,0],
        blue:[0,0,255],
        brown:[165,42,42],
        cyan:[0,255,255],
        darkblue:[0,0,139],
        darkcyan:[0,139,139],
        darkgrey:[169,169,169],
        darkgreen:[0,100,0],
        darkkhaki:[189,183,107],
        darkmagenta:[139,0,139],
        darkolivegreen:[85,107,47],
        darkorange:[255,140,0],
        darkorchid:[153,50,204],
        darkred:[139,0,0],
        darksalmon:[233,150,122],
        darkviolet:[148,0,211],
        fuchsia:[255,0,255],
        gold:[255,215,0],
        green:[0,128,0],
        indigo:[75,0,130],
        khaki:[240,230,140],
        lightblue:[173,216,230],
        lightcyan:[224,255,255],
        lightgreen:[144,238,144],
        lightgrey:[211,211,211],
        lightpink:[255,182,193],
        lightyellow:[255,255,224],
        lime:[0,255,0],
        magenta:[255,0,255],
        maroon:[128,0,0],
        navy:[0,0,128],
        olive:[128,128,0],
        orange:[255,165,0],
        pink:[255,192,203],
        purple:[128,0,128],
        violet:[128,0,128],
        red:[255,0,0],
        silver:[192,192,192],
        white:[255,255,255],
        yellow:[255,255,0]
    };    

    function extractColor(element) {
        var color, elem = element;
        do {
            color = elem.css("background-color").toLowerCase();
          
            if (color != '' &amp;&amp; color != 'transparent')
                break;
            elem = elem.parent();
        } while (!$.nodeName(elem.get(0), "body"));

    
        if (color == "rgba(0, 0, 0, 0)") 
            return "transparent";
        
        return color;
    }
    
    
    function parseColor(str) {
        var result;

     
        if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))
            return new Color(parseInt(result[1], 10), parseInt(result[2], 10), parseInt(result[3], 10));
        
       
        if (result = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))
            return new Color(parseInt(result[1], 10), parseInt(result[2], 10), parseInt(result[3], 10), parseFloat(result[4]));
        
        if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))
            return new Color(parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55);

      
        if (result = /rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))
            return new Color(parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55, parseFloat(result[4]));
        
        if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))
            return new Color(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16));

       
        if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))
            return new Color(parseInt(result[1]+result[1], 16), parseInt(result[2]+result[2], 16), parseInt(result[3]+result[3], 16));

        var name = $.trim(str).toLowerCase();
        if (name == "transparent")
            return new Color(255, 255, 255, 0);
        else {
            result = lookupColors[name];
            return new Color(result[0], result[1], result[2]);
        }
    }
        
})(jQuery);
//]]&gt;
&lt;/script&gt;



&lt;div id="placeholder3" style="width:600px;height:300px;"&gt;&lt;/div&gt;

    &lt;p&gt;Simple example. You don't need to specify much to get an
       attractive look. Put in a placeholder, make sure you set its
       dimensions (otherwise the plot library will barf) and call the
       plot function with the data. The axes are automatically
       scaled.&lt;/p&gt;

&lt;script id="source" language="javascript" type="text/javascript"&gt;$(function () {    var d1 = []; for (var i = 0; i &lt; 14; i += 0.5) d1.push([i, Math.sin(i)]); var d2 = [[0, 3], [4, 8], [8, 5], [9, 13]]; var d3 = [[0, 12], [7, 12], null, [7, 2.5], [12, 2.5]]; $.plot($("#placeholder3"), [ d1, d2, d3 ]); }); &lt;/script&gt;


    &lt;div id="placeholder4" style="width:600px;height:300px"&gt;&lt;/div&gt;

    &lt;p&gt;One of the goals of Flot is to support user interactions. Try
    pointing and clicking on the points.&lt;/p&gt;

    &lt;p id="hoverdata"&gt;Mouse hovers at
    (&lt;span id="x"&gt;0&lt;/span&gt;, &lt;span id="y"&gt;0&lt;/span&gt;). &lt;span id="clickdata"&gt;&lt;/span&gt;&lt;/p&gt;

    &lt;p&gt;A tooltip is easy to build with a bit of jQuery code and the
    data returned from the plot.&lt;/p&gt;

    &lt;p&gt;&lt;input id="enableTooltip" type="checkbox"&gt;Enable tooltip&lt;/p&gt;

&lt;script id="source" language="javascript" type="text/javascript"&gt;//&lt;![CDATA[
$(function () {
    var sin = [], cos = [];
    for (var i = 0; i &lt; 14; i += 0.5) {
        sin.push([i, Math.sin(i)]);
        cos.push([i, Math.cos(i)]);
    }

    var plot = $.plot($("#placeholder4"),
           [ { data: sin, label: "sin(x)"}, { data: cos, label: "cos(x)" } ],
           { lines: { show: true },
             points: { show: true },
             selection: { mode: "xy" },
             grid: { hoverable: true, clickable: true },
             yaxis: { min: -1.2, max: 1.2 }
             });

    function showTooltip(x, y, contents) {
        $('&lt;div id="tooltip"&gt;' + contents + '&lt;/div&gt;').css( {
            position: 'absolute',
            display: 'none',
            top: y + 5,
            left: x + 5,
            border: '1px solid #fdd',
            padding: '2px',
            'background-color': '#fee',
            opacity: 0.80
        }).appendTo("body").fadeIn(200);
    }

    var previousPoint = null;
    $("#placeholder4").bind("plothover", function (event, pos, item) {
        $("#x").text(pos.x.toFixed(2));
        $("#y").text(pos.y.toFixed(2));

        if ($("#enableTooltip:checked").length &gt; 0) {
            if (item) {
                if (previousPoint != item.datapoint) {
                    previousPoint = item.datapoint;
                    
                    $("#tooltip").remove();
                    var x = item.datapoint[0].toFixed(2),
                        y = item.datapoint[1].toFixed(2);
                    
                    showTooltip(item.pageX, item.pageY,
                                item.series.label + " of " + x + " = " + y);
                }
            }
            else {
                $("#tooltip").remove();
                previousPoint = null;            
            }
        }
    });

    $("#placeholder4").bind("plotclick", function (event, pos, item) {
        if (item) {
            $("#clickdata").text("You clicked point " + item.dataIndex + " in " + item.series.label + ".");
            plot.highlight(item.series, item.datapoint);
        }
    });
});
//]]&gt;&lt;/script&gt;

&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8585651-2838975355513495207?l=nitricacid.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nitricacid.blogspot.com/feeds/2838975355513495207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8585651&amp;postID=2838975355513495207&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/2838975355513495207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/2838975355513495207'/><link rel='alternate' type='text/html' href='http://nitricacid.blogspot.com/2009/05/flot-test-2.html' title='Flot Test 2'/><author><name>Max</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8585651.post-3113267491349504346</id><published>2008-12-04T11:30:00.000-08:00</published><updated>2008-12-04T12:43:45.236-08:00</updated><title type='text'>Canon Powershot SX10 IS Zoom Example</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OjftCEBUcYQ/SThAzUDKy3I/AAAAAAAADOM/UsAdPaQZ2Eg/s1600-h/IMG_0266.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_OjftCEBUcYQ/SThAzUDKy3I/AAAAAAAADOM/UsAdPaQZ2Eg/s400/IMG_0266.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5276038213764041586" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_OjftCEBUcYQ/STgwd4U2KkI/AAAAAAAADNk/WYCeVaP3rl8/s1600-h/IMG_0267.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_OjftCEBUcYQ/STgwd4U2KkI/AAAAAAAADNk/WYCeVaP3rl8/s400/IMG_0267.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5276020253358697026" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_OjftCEBUcYQ/STgweKWtU-I/AAAAAAAADNs/G1bX67LvqW8/s1600-h/IMG_0268.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_OjftCEBUcYQ/STgweKWtU-I/AAAAAAAADNs/G1bX67LvqW8/s400/IMG_0268.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5276020258198344674" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OjftCEBUcYQ/STgweibKkvI/AAAAAAAADN8/tJuNlnRRs1c/s1600-h/IMG_0270.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_OjftCEBUcYQ/STgweibKkvI/AAAAAAAADN8/tJuNlnRRs1c/s400/IMG_0270.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5276020264659489522" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_OjftCEBUcYQ/STgweXD6mjI/AAAAAAAADN0/D0trBJTcHhU/s1600-h/IMG_0269.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_OjftCEBUcYQ/STgweXD6mjI/AAAAAAAADN0/D0trBJTcHhU/s400/IMG_0269.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5276020261609183794" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8585651-3113267491349504346?l=nitricacid.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nitricacid.blogspot.com/feeds/3113267491349504346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8585651&amp;postID=3113267491349504346&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/3113267491349504346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/3113267491349504346'/><link rel='alternate' type='text/html' href='http://nitricacid.blogspot.com/2008/12/canon-powershot-sx10-is-zoom-example.html' title='Canon Powershot SX10 IS Zoom Example'/><author><name>Max</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_OjftCEBUcYQ/SThAzUDKy3I/AAAAAAAADOM/UsAdPaQZ2Eg/s72-c/IMG_0266.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8585651.post-3435001611759595668</id><published>2008-01-02T19:27:00.001-08:00</published><updated>2008-01-03T21:48:05.449-08:00</updated><title type='text'>Live Sacramento Weather Images</title><content type='html'>&lt;strong&gt;Pacific Satellite:&lt;/strong&gt;

&lt;a href="http://images.intellicast.com/WeatherImg/SatelliteLoop/hipacsat_None_anim.gif"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 768px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://images.intellicast.com/WeatherImg/SatelliteLoop/hipacsat_None_anim.gif" border="0" /&gt;&lt;/a&gt;
&lt;strong&gt;Regional Radar Composite:&lt;/strong&gt; 

&lt;a href="http://sirocco.accuweather.com/nx_mosaic_640x480c/SIR/inmaSIRCAN.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 640px;" src="http://sirocco.accuweather.com/nx_mosaic_640x480c/SIR/inmaSIRCAN.gif" border="0" alt="" /&gt;&lt;/a&gt;

&lt;a href="http://radar.weather.gov/Conus/Loop/pacsouthwest_loop.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 587px;" src="http://radar.weather.gov/Conus/Loop/pacsouthwest_loop.gif" border="0" alt="" /&gt;&lt;/a&gt;
&lt;strong&gt;Local Radar:&lt;/strong&gt;

&lt;a href="http://radblast-aa.wunderground.com/cgi-bin/radar/WUNIDS_map?station=DAX&amp;brand=wui&amp;num=6&amp;delay=15&amp;type=N1R&amp;frame=0&amp;scale=0.750&amp;noclutter=0&amp;t=1199346955&amp;lat=0&amp;lon=0&amp;label=you&amp;showstorms=0&amp;map.x=400&amp;map.y=240&amp;centerx=477&amp;centery=265&amp;transx=77&amp;transy=25&amp;showlabels=1&amp;severe=0&amp;rainsnow=0&amp;lightning=1"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 640px;" src="http://radblast-aa.wunderground.com/cgi-bin/radar/WUNIDS_map?station=DAX&amp;brand=wui&amp;num=6&amp;delay=15&amp;type=N1R&amp;frame=0&amp;scale=0.750&amp;noclutter=0&amp;t=1199346955&amp;lat=0&amp;lon=0&amp;label=you&amp;showstorms=0&amp;map.x=400&amp;map.y=240&amp;centerx=477&amp;centery=265&amp;transx=77&amp;transy=25&amp;showlabels=1&amp;severe=0&amp;rainsnow=0&amp;lightning=1" border="0" alt="" /&gt;&lt;/a&gt;

&lt;a href="http://radblast-aa.wunderground.com/cgi-bin/radar/WUNIDS_map?station=DAX&amp;brand=wui&amp;num=6&amp;delay=15&amp;type=N1R&amp;frame=0&amp;scale=0.209&amp;noclutter=0&amp;t=1199381163&amp;lat=0&amp;lon=0&amp;label=you&amp;showstorms=0&amp;map.x=400&amp;map.y=240&amp;centerx=342&amp;centery=275&amp;transx=-58&amp;transy=35&amp;showlabels=1&amp;severe=0&amp;rainsnow=0&amp;lightning=1"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 640px;" src="http://radblast-aa.wunderground.com/cgi-bin/radar/WUNIDS_map?station=DAX&amp;brand=wui&amp;num=6&amp;delay=15&amp;type=N1R&amp;frame=0&amp;scale=0.209&amp;noclutter=0&amp;t=1199381163&amp;lat=0&amp;lon=0&amp;label=you&amp;showstorms=0&amp;map.x=400&amp;map.y=240&amp;centerx=342&amp;centery=275&amp;transx=-58&amp;transy=35&amp;showlabels=1&amp;severe=0&amp;rainsnow=0&amp;lightning=1" border="0" alt="" /&gt;&lt;/a&gt;

&lt;a href="http://sirocco.accuweather.com/nxssa_r1_h_500x620d/r1h/inxr1KSACa_h.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" src="http://sirocco.accuweather.com/nxssa_r1_h_500x620d/r1h/inxr1KSACa_h.gif" border="0" alt="" /&gt;&lt;/a&gt;

&lt;div style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 700px;"&gt;
&lt;OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" WIDTH=640 HEIGHT=547&gt;&lt;PARAM NAME=movie VALUE="http://images.ibsys.com/sh/includes/weather/flashloop/looper_array.swf?filepath=http://images.ibsys.com/sac/images/weather/auto/radar_loop_640x480.xml"&gt; &lt;PARAM NAME=quality VALUE=best&gt; &lt;PARAM NAME=wmode VALUE=&gt; &lt;PARAM NAME=bgcolor VALUE=#FFFFFF&gt; &lt;EMBED src="http://images.ibsys.com/sh/includes/weather/flashloop/looper_array.swf?filepath=http://images.ibsys.com/sac/images/weather/auto/radar_loop_640x480.xml" quality=best bgcolor=#FFFFFF WIDTH=640 HEIGHT=547 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"&gt;&lt;/EMBED&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;strong&gt;Lightning Strikes:&lt;/strong&gt;

&lt;a href="http://image.weather.com/images/maps/severe/map_light_ltst_4namus_enus_600x405.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 600px;" src="http://image.weather.com/images/maps/severe/map_light_ltst_4namus_enus_600x405.jpg" border="0" alt="" /&gt;&lt;/a&gt;

&lt;strong&gt;Web Cams:&lt;/strong&gt;
&lt;div style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 700px;"&gt;
&lt;object width="700" height="310"&gt;
&lt;param name="movie" value="Web Cam"&gt;
&lt;embed src="http://images.ibsys.com/2007/1226/14926681.swf" width="700" height="310"&gt;
&lt;/embed&gt;
&lt;/object&gt;
&lt;/div&gt;

&lt;strong&gt;River Flow Data:&lt;/strong&gt;
&lt;table border=1 cellpadding="1" cellspacing="1"&gt;
&lt;tr&gt;&lt;td bgcolor=ffffff&gt;&lt;img src="http://cdec.water.ca.gov/stagePlots/nat76.png" width=380 height=280&gt;&lt;br&gt;&lt;a href="http://cdec.water.ca.gov/cgi-progs/queryF?nat"&gt;LAKE NATOMA (NIMBUS DAM)&lt;/a&gt;&lt;/td&gt;&lt;td bgcolor=ffffff&gt;&lt;img src="http://cdec.water.ca.gov/stagePlots/nat23.png" width=380 height=280&gt;&lt;br&gt;&lt;a href="http://cdec.water.ca.gov/cgi-progs/queryF?nat"&gt;LAKE NATOMA (NIMBUS DAM)&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td bgcolor=ffffff&gt;
&lt;img src="http://cdec.water.ca.gov/stagePlots/nat15.png" width=380 height=280&gt;&lt;br&gt;&lt;a href=/cgi-progs/queryF?nat&gt;LAKE NATOMA (NIMBUS DAM)&lt;/a&gt;&lt;/td&gt;
&lt;td bgcolor=ffffff&gt;
&lt;img src="http://cdec.water.ca.gov/stagePlots/nat6.png" width=380 height=280&gt;&lt;br&gt;&lt;a href="http://cdec.water.ca.gov/cgi-progs/queryF?nat"&gt;LAKE NATOMA (NIMBUS DAM)&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td bgcolor=ffffff&gt;
&lt;img src="http://cdec.water.ca.gov/stagePlots/afo1.png" width=380 height=280&gt;&lt;br&gt;&lt;a href=/cgi-progs/queryF?afo&gt;AMERICAN RIVER AT FAIR OAKS&lt;/a&gt;&lt;/td&gt;
&lt;td bgcolor=ffffff&gt;
&lt;img src="http://cdec.water.ca.gov/stagePlots/afo20.png" width=380 height=280&gt;&lt;br&gt;&lt;a href="http://cdec.water.ca.gov/cgi-progs/queryF?afo"&gt;AMERICAN RIVER AT FAIR OAKS&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td bgcolor=ffffff&gt;
&lt;img src="http://cdec.water.ca.gov/stagePlots/hst1.png" width=380 height=280&gt;&lt;br&gt;&lt;a href=/cgi-progs/queryF?hst&gt;AMERICAN RIVER AT H ST Bridge&lt;/a&gt;&lt;/td&gt;
&lt;td bgcolor=ffffff&gt;
&lt;img src="http://cdec.water.ca.gov/stagePlots/yby1.png" width=380 height=280&gt;&lt;br&gt;&lt;a href="http://cdec.water.ca.gov/cgi-progs/queryF?yby"&gt;YOLO BYPASS NEAR WOODLAND&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8585651-3435001611759595668?l=nitricacid.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nitricacid.blogspot.com/feeds/3435001611759595668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8585651&amp;postID=3435001611759595668&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/3435001611759595668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/3435001611759595668'/><link rel='alternate' type='text/html' href='http://nitricacid.blogspot.com/2008/01/live-sacramento-weather-images.html' title='Live Sacramento Weather Images'/><author><name>Max</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8585651.post-2716525818253438972</id><published>2007-11-12T09:44:00.000-08:00</published><updated>2007-11-24T07:38:44.298-08:00</updated><title type='text'>Why Does Disney Always Kill The Parents</title><content type='html'>There was a great web site that listed all the Disney parent deaths, but it went down a couple of years ago. Since &lt;a href="http://en.wikipedia.org/wiki/Enchanted_%282007_film%29"&gt;Enchanted&lt;/a&gt; has been released, I've resurrected their list here, for posterity. Enjoy!&lt;BR&gt;&lt;br&gt;

 &lt;table border="1" cellspacing="0" cellpadding="2"&gt;
         &lt;tr&gt;
            &lt;th&gt;Movie&lt;/th&gt;
            &lt;th&gt;Mother&lt;/th&gt;
            &lt;th&gt;Father&lt;/th&gt;
         &lt;/tr&gt;
         &lt;tr&gt;

            &lt;td style="font-weight:bold"&gt;A Bugs Life&lt;/td&gt;
            &lt;td style="background-color:#ffffff"&gt;&amp;nbsp;&lt;/td&gt;
            &lt;td style="background-color:#ffff99"&gt;MIA&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Aladdin&lt;/td&gt;
            &lt;td style="background-color:#ff9900"&gt;Orphaned&lt;/td&gt;

            &lt;td style="background-color:#ffffff"&gt;&amp;nbsp;&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Atlantis&lt;/td&gt;
            &lt;td style="background-color:#ffff99"&gt;MIA?&lt;/td&gt;
            &lt;td style="background-color:#ffff99"&gt;MIA?&lt;/td&gt;
         &lt;/tr&gt;

         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Bambi&lt;/td&gt;
            &lt;td style="background-color:#ff3333"&gt;Murdered by hunter&lt;/td&gt;
            &lt;td style="background-color:#ffff99"&gt;MIA for most of the movie&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Beauty and the Beast&lt;/td&gt;

            &lt;td style="background-color:#ffff99"&gt;MIA&lt;/td&gt;
            &lt;td style="background-color:#ffffff"&gt;&amp;nbsp;&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Brother Bear&lt;/td&gt;
            &lt;td style="background-color:#ff3333"&gt;Mommy bear dies&lt;/td&gt;
            &lt;td style="background-color:#ffffff"&gt;&amp;nbsp;&lt;/td&gt;

         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Cinderella&lt;/td&gt;
            &lt;td style="background-color:#ff3333"&gt;Dead&lt;/td&gt;
            &lt;td style="background-color:#ff3333"&gt;Dead&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;

            &lt;td style="font-weight:bold"&gt;Dinosaur&lt;/td&gt;
            &lt;td style="background-color:#ffff99"&gt;Scared away forever&lt;/td&gt;
            &lt;td&gt;?&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Dumbo&lt;/td&gt;
            &lt;td style="background-color:#ffffff"&gt;&amp;nbsp;&lt;/td&gt;

            &lt;td style="background-color:#ffff99"&gt;MIA&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Finding Nemo&lt;/td&gt;
            &lt;td style="background-color:#ff3333"&gt;Killed at beginning of the movie&lt;/td&gt;
            &lt;td style="background-color:#ffffff"&gt;&amp;nbsp;&lt;/td&gt;
         &lt;/tr&gt;

         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Hunchback of Notre Dame&lt;/td&gt;
            &lt;td style="background-color:#ff3333"&gt;Killed&lt;/td&gt;
            &lt;td&gt;?&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Jungle Book&lt;/td&gt;

            &lt;td style="background-color:#ff9900"&gt;Orphaned&lt;/td&gt;
            &lt;td style="background-color:#ff9900"&gt;Orphaned&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Lilo &amp;amp; Stitch&lt;/td&gt;
            &lt;td style="background-color:#ff3333"&gt;Dead&lt;/td&gt;

            &lt;td style="background-color:#ff3333"&gt;Dead&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;The Lion King&lt;/td&gt;
            &lt;td style="background-color:#ffffff"&gt;&amp;nbsp;&lt;/td&gt;
            &lt;td style="background-color:#ff3333"&gt;Brutally murdered in a stampede&lt;/td&gt;
         &lt;/tr&gt;

         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;The Little Mermaid&lt;/td&gt;
            &lt;td style="background-color:#ffff99"&gt;MIA&lt;/td&gt;
            &lt;td style="background-color:#ffffff"&gt;&amp;nbsp;&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Peter Pan&lt;/td&gt;

            &lt;td style="background-color:#ff9900"&gt;Orphaned&lt;/td&gt;
            &lt;td style="background-color:#ff9900"&gt;Orphaned&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Pinocchio&lt;/td&gt;
            &lt;td style="background-color:#ffff99"&gt;MIA&lt;/td&gt;
            &lt;td style="background-color:#ffffff"&gt;&amp;nbsp;&lt;/td&gt;

         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Pocahontas&lt;/td&gt;
            &lt;td style="background-color:#ffff99"&gt;MIA&lt;/td&gt;
            &lt;td style="background-color:#ffffff"&gt;&amp;nbsp;&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;The Rescuers&lt;/td&gt;

            &lt;td style="background-color:#ff9900"&gt;Orphaned&lt;/td&gt;
            &lt;td style="background-color:#ff9900"&gt;Orphaned&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Snow White&lt;/td&gt;
            &lt;td style="background-color:#ff3333"&gt;Dead&lt;/td&gt;
            &lt;td style="background-color:#ff3333"&gt;Dead&lt;/td&gt;

         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Tarzan&lt;/td&gt;
            &lt;td style="background-color:#ff3333"&gt;Eaten at the beginning of the movie&lt;/td&gt;
            &lt;td style="background-color:#ff3333"&gt;Eaten at the beginning of the movie&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;

            &lt;td style="font-weight:bold"&gt;Toy Story&lt;/td&gt;
            &lt;td style="background-color:#ffffff"&gt;&amp;nbsp;&lt;/td&gt;
            &lt;td style="background-color:#ffff99"&gt;MIA&lt;/td&gt;
         &lt;/tr&gt;
         &lt;tr&gt;
            &lt;td style="font-weight:bold"&gt;Toy Story 2&lt;/td&gt;
            &lt;td style="background-color:#ffffff"&gt;&amp;nbsp;&lt;/td&gt;

            &lt;td style="background-color:#ffff99"&gt;MIA&lt;/td&gt;
         &lt;/tr&gt;
      &lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8585651-2716525818253438972?l=nitricacid.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nitricacid.blogspot.com/feeds/2716525818253438972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8585651&amp;postID=2716525818253438972&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/2716525818253438972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/2716525818253438972'/><link rel='alternate' type='text/html' href='http://nitricacid.blogspot.com/2007/11/why-does-disney-always-kill-parents.html' title='Why Does Disney Always Kill The Parents'/><author><name>Max</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8585651.post-8789128561491999000</id><published>2006-09-15T20:16:00.000-07:00</published><updated>2006-09-15T20:28:09.171-07:00</updated><title type='text'>Fight Back Against Junk Mail</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/435/1048/1600/Copy%20%281%29%20of%20IMG_5393.jpg"&gt;&lt;img style="display:block; margin: 0pt 10px 10px 0pt; text-align:left;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/435/1048/400/Copy%20%281%29%20of%20IMG_5393.jpg" border="0" alt="" /&gt;&lt;/a&gt;At our house, we get an average of one credit card offer per person per day.  These offers usually include an annoying application partially filled out with personal information.  They also contain other junk, along with an envelope with its postage prepaid by the solicitor in the hopes that it will be returned.

I don’t know about you, but I’m sick of getting these wasteful letters all the time.  They waste resources in the production and transport of them, and they cost me time since I must dispose of the sensitive portions by shredding.

Now, the only reason these companies send these solicitations is because they are profitable.  The minute they stop making money through these, they will stop sending them.

Through the postage paid envelope, these companies have given us the seeds of their own destruction.  We can cost them time and money by returning the junk mail back to them in the return envelope.  Here’s two weeks worth that I plan on mailing tomorrow:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/435/1048/1600/IMG_5395.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/435/1048/400/IMG_5395.jpg" border="0" alt="" /&gt;&lt;/a&gt;
Remember to remove all personal information from the junk you return if you want to remain anonymous:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/435/1048/1600/IMG_5394.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger2/435/1048/400/IMG_5394.jpg" border="0" alt="" /&gt;&lt;/a&gt;
If everyone in the US returned only &lt;i&gt;one&lt;/i&gt; piece of junk mail a week, the junk mail industry would fail.  I know you can do it: return your junk mail today!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8585651-8789128561491999000?l=nitricacid.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nitricacid.blogspot.com/feeds/8789128561491999000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8585651&amp;postID=8789128561491999000&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/8789128561491999000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/8789128561491999000'/><link rel='alternate' type='text/html' href='http://nitricacid.blogspot.com/2006/09/fight-back-against-junk-mail.html' title='Fight Back Against Junk Mail'/><author><name>Max</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8585651.post-114804004495751657</id><published>2006-05-19T04:55:00.000-07:00</published><updated>2006-05-19T05:00:44.956-07:00</updated><title type='text'>New Blog</title><content type='html'>I've started a new blog for my real estate postings. You can find it at &lt;a href="http://sacrealstats.blogspot.com/"&gt;sacrealstats.blogspot.com.&lt;/a&gt; I'll continue to update this blog with randomness, at random intervals.

Max&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8585651-114804004495751657?l=nitricacid.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nitricacid.blogspot.com/feeds/114804004495751657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8585651&amp;postID=114804004495751657&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/114804004495751657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/114804004495751657'/><link rel='alternate' type='text/html' href='http://nitricacid.blogspot.com/2006/05/new-blog.html' title='New Blog'/><author><name>Max</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8585651.post-114774100450659745</id><published>2006-05-15T17:31:00.000-07:00</published><updated>2006-05-15T19:36:34.860-07:00</updated><title type='text'>Sacramento Home Listings &amp; Inventory Numbers</title><content type='html'>Sorry for the long delay.  I’ve been trying to get explicit clearance to post my browsable Google Earth files, but no dice so far.  Instead, I have some aggregate data and more pretty pictures.

I have been working from two data sets.  One is taken from active listings for Sacramento, Yolo, Placer, and El Dorado counties, and contains active listing data only.  (Pending sales are not included.)  The second data set contains pending sales and active listings, and is where I get my daily inventory stats.  Although the active listing data set is more conservative in absolute terms, they compare very well trend-wise.  (Interestingly, if you subtract the totals from both data sets on any day, you come up with a difference of around 1500.  Presumably this is the number of pending sales.  I will keep my eye on this and report back later.)

Anyway, to the data:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/data1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6672/589/400/data1.png" alt="" border="0" /&gt;&lt;/a&gt;

The median asking price in all counties has been firm with a slight upward trend for the last five weeks, while the average price per square foot is holding steady.  &lt;a href="http://bubbletracking.blogspot.com/2006/05/tracking-sacramento-metro.html"&gt;Inventory surpassed the April 1992 record of 13,507 on May 4th&lt;/a&gt;, and should surpass the population adjusted record of 17,913 by mid August if the accelerating upward trend holds:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/data2.0.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/data2.0.png" border="0" alt="" /&gt;&lt;/a&gt;

During the first three months, inventory grew an average of 22 listings per day:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/data4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/data4.png" border="0" alt="" /&gt;&lt;/a&gt;

That trend has accelerated, and inventory is growing by about 28 listings per day.  We are already about 600 listings over the peak from October 2005, and on the last two weekends alone Sacramento inventory grew by 510 listings:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/data3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/data3.png" border="0" alt="" /&gt;&lt;/a&gt;

So, what does this market actually look like?  I put together some &lt;a href="http://earth.google.com/"&gt;Google Earth&lt;/a&gt; images of the latest data set to answer that question.  Unfortunately, I am unable at this time to offer the actual data file.

I would also like to thank &lt;a href="http://patrick.net/wp/"&gt;Patrick Killelea&lt;/a&gt; for  posting this blog on his &lt;a href="http://patrick.net/housing/crash.html#links"&gt;widely read housing news site&lt;/a&gt;.  Without him, nobody would read this.

Max

&lt;span style="font-weight:bold;"&gt;Note:&lt;/span&gt; The large dots designate that a price change has occurred.

El Dorado Hills/Cameron Park:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ge1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ge1.jpg" border="0" alt="" /&gt;&lt;/a&gt;

Folsom / Orangevale / Citrus Heights:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ge2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ge2.jpg" border="0" alt="" /&gt;&lt;/a&gt;

North Highlands / Fair Oaks / Carmichael:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ge3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ge3.jpg" border="0" alt="" /&gt;&lt;/a&gt;

North and East Sacramento:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ge4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ge4.jpg" border="0" alt="" /&gt;&lt;/a&gt;

South Sacramento:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ge5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ge5.jpg" border="0" alt="" /&gt;&lt;/a&gt;

Elk Grove:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ge6.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ge6.jpg" border="0" alt="" /&gt;&lt;/a&gt;

Natomas / Rio Linda:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ge7.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ge7.jpg" border="0" alt="" /&gt;&lt;/a&gt;

Roseville / Rocklin:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ge8.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ge8.jpg" border="0" alt="" /&gt;&lt;/a&gt;

Woodland:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ge9.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ge9.jpg" border="0" alt="" /&gt;&lt;/a&gt;

Davis:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ge10.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ge10.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8585651-114774100450659745?l=nitricacid.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nitricacid.blogspot.com/feeds/114774100450659745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8585651&amp;postID=114774100450659745&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/114774100450659745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/114774100450659745'/><link rel='alternate' type='text/html' href='http://nitricacid.blogspot.com/2006/05/sacramento-home-listings-inventory.html' title='Sacramento Home Listings &amp; Inventory Numbers'/><author><name>Max</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8585651.post-114493682060879339</id><published>2006-04-13T06:54:00.000-07:00</published><updated>2006-04-16T16:20:21.193-07:00</updated><title type='text'>San Francisco Home Listings Preliminary</title><content type='html'>I’ve just compiled a rough draft data set of all Bay Area home listings.  The data set isn’t refined enough to release quite yet, but I thought I’d share some images taken from &lt;a href="http://earth.google.com/"&gt;Google Earth&lt;/a&gt; after I imported it.

&lt;span style="font-weight:bold;"&gt;As of April 13, 2006, there were over 27,000 homes listed for sale in the Bay Area, with 20,106 listed as "Active Listings" and 7,529 as "Pending Sales".  In the following images, the pending sales are the red dots, and the active listings are white. Each dot represents one property (house, condo, land) offered for sale in the Bay Area.&lt;/span&gt;

The first image illustrates the impact Bay Area investors have had on the regional market.  Notice the tendrils of speculation that spread out along the highways into the Central Valley, up to Sacramento, down to Monterey, and up into the foothills of the Sierras.  

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ba_1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ba_1.jpg" border="0" alt="" /&gt;&lt;/a&gt;

The Monterey and Salinas home markets are way too small to survive on native demand.  There are over 750 active, and 150 pending listings for &lt;a href="http://en.wikipedia.org/wiki/Salinas,_California"&gt;Salinas&lt;/a&gt; in the Bay Area listing service.  That ratio of 1:160 listings per person, in a city of roughly 150,000 people, mirrors the one in &lt;a href="http://bubbletracking.blogspot.com/2006/04/tracking-san-diego-county.html"&gt;San Diego&lt;/a&gt;.


&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ba_2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ba_2.jpg" border="0" alt="" /&gt;&lt;/a&gt;

Santa Cruz and Watsonville are close enough to San Jose to almost be considered suburbs.  I’m not sure about commuting over 17, though.  

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ba_3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ba_3.jpg" border="0" alt="" /&gt;&lt;/a&gt;

Here’s what 25,000+ home listings look like in a region with roughly 6,000,000 people:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ba_4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ba_4.jpg" border="0" alt="" /&gt;&lt;/a&gt;

I’m going to let the rest of these speak for themselves.  Once I refine the data set, I’ll post it here.

Max

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ba_5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ba_5.jpg" border="0" alt="" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ba_6.0.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ba_6.0.jpg" border="0" alt="" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ba_7.0.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ba_7.0.jpg" border="0" alt="" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ba_8.0.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ba_8.0.jpg" border="0" alt="" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ba_9.0.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ba_9.0.jpg" border="0" alt="" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ba_10.0.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ba_10.0.jpg" border="0" alt="" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ba_11.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ba_11.jpg" border="0" alt="" /&gt;&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/ba_12.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/400/ba_12.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8585651-114493682060879339?l=nitricacid.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nitricacid.blogspot.com/feeds/114493682060879339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8585651&amp;postID=114493682060879339&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/114493682060879339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/114493682060879339'/><link rel='alternate' type='text/html' href='http://nitricacid.blogspot.com/2006/04/san-francisco-home-listings.html' title='San Francisco Home Listings Preliminary'/><author><name>Max</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8585651.post-114453400492165133</id><published>2006-04-08T14:58:00.000-07:00</published><updated>2006-04-09T16:44:56.890-07:00</updated><title type='text'>Sacramento County Home Listings (4-9-06)</title><content type='html'>I'm struggling with how best to display the data I've found. Google Maps is very slow loading when there's more than 200 data points per map, and it's hard to get a good understanding that way. I think the best answer right now is to use &lt;a href="http://earth.google.com"&gt;Google Earth.&lt;/a&gt; It's very fast, a lot more functional than Google Maps, and creating a data file for it is trivial.

I've compiled all the listings I've found into &lt;a href="http://www.mytempdir.com/581565"&gt;this file.&lt;/a&gt;  Download &lt;a href="http://earth.google.com"&gt;Google Earth&lt;/a&gt; (it's free) and download the file. Then, let me know what you think.

Alternate File Locations

&lt;a href="http://www.upload2.net/download2/gnPLHhOD56YeP2C/Sacramento+County+Homes+For+Sale+%284-9-06%29.kmz.html"&gt;Alternate 1&lt;/a&gt;
&lt;a href="http://www.filefactory.com/?3a92b4"&gt;Alternate 2&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6672/589/1600/sac_whole2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6672/589/320/sac_whole2.jpg" border="0" alt="" /&gt;&lt;/a&gt;

Sacramento County
Date: April 9, 2006
Homes on Map: 8101&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8585651-114453400492165133?l=nitricacid.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nitricacid.blogspot.com/feeds/114453400492165133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8585651&amp;postID=114453400492165133&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/114453400492165133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/114453400492165133'/><link rel='alternate' type='text/html' href='http://nitricacid.blogspot.com/2006/04/sacramento-county-home-listings-4-9-06.html' title='Sacramento County Home Listings (4-9-06)'/><author><name>Max</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8585651.post-114452821848433788</id><published>2006-04-08T13:29:00.000-07:00</published><updated>2006-04-08T13:30:26.683-07:00</updated><title type='text'>Antelope Homes For Sale (4-8-06)</title><content type='html'>&lt;script src="http://maps.google.com/maps?file=api&amp;v=1&amp;key=ABQIAAAAZ4mydILXmUipbaSGs85fTRSHEq5_3QxTfXM--pVCjyRpntjy-hSMaElf6ZNa6FazC2L2OKUIdDxjzQ" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt; function map_details(){ var map = new GMap(document.getElementById("google_map")); map.addControl(new GLargeMapControl()); map.addControl(new GMapTypeControl());map.centerAndZoom(new GPoint(-121.36425018310547,38.703731017420004),5);map.addOverlay(createMarker(new GPoint(-121.33006,38.708265),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5755 Old N Antelope Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $199950&lt;BR&gt;Beds:1 Baths:1&lt;BR&gt;Size:750 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.714267),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8020 Walerga Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $224900&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:890 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.714267),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8020 Walerga Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $224900&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:890 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.714267),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8020 Walerga&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $228500&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:890 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.714267),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8020 Walerga Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $229000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:890 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.714267),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8020 Walerga Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $229900&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:890 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.714267),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8020 Walerga Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $230000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:890 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.714267),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8020 Walerga Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $230000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:890 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.381994,38.704563),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3530 Caballero Ln&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $233750&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1246 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.714267),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8020 Walerga Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $235000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:836 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.714267),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8020 Walerga Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $235000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:836 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.381977,38.706063),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7681 Roberta&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $255000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1378 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.381499,38.704837),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3569 Caballero Ln&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $257900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1424 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.714267),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8020 Walerga Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $267900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1193 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.714267),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8020 Walerga Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $267900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1193 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.714267),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8020 Walerga Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $269000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1193 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.381223,38.705895),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7668 Lily Mar&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $269999&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1424 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.389279,38.705861),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3307 Davidson Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $275000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1014 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.381223,38.705872),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7664 Lily Mar Ln&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $279000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1378 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.714267),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8020 Walerga Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $279000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1193 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.381881,38.705463),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7665 Lily Mar Ln&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $280000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1246 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.389758,38.705141),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3307 Langley Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $289000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:1308 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.393823,38.706666),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7656 Tartan Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $292000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1050 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.392023,38.705663),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3200 davidson drive&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $295000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:988 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.393975,38.707602),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3109 Scotland Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $298000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:991 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.712686),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7910 WALERGA Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $299000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1219 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.365705,38.716441),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8329 Deer Spring Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $299900&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1098 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.342422,38.706225),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5236 Thomasino Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $309000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1091 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.392993,38.711164),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7887 Caber Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $309900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1362 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.365842,38.716441),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8321 Deer Spring Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $313900&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1098 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.339723,38.704959),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5428 Vichy Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $315000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:886 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.365842,38.716441),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8321 Deer Spring Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $316900&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1098 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.381538,38.716628),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3520 Silver Sage Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $319000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1164 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.391875,38.70741),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3219 Irvindale Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $319900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1436 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.394419,38.708669),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3057 Scotland Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $319900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1471 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.359358,38.711116),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4528 Antelope Park Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $325500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1189 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.349204,38.718019),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4941 Dillon Cross Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $330000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1215 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.382852,38.714465),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3462 Lowther Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $332000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1215 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.360753,38.723867),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4437 Old Dairy Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $333000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1410 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.353523,38.725373),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8641 Travary Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $337500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1195 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.382154,38.719463),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3508 Ridge Rim Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $339000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1132 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.3648,38.7159),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7556 Mountain Oak Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $339000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1400 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.383731,38.726476),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8637 Acacia Woods Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $339000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1158 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.338806,38.704869),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5408 Buena Park Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $339500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1241 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.354975,38.716235),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8121 Otium Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $339900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1510 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.37795,38.706157),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3637 Kodiak Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $339900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1206 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.712686),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7910 WALERGA Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $340000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1605 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.376226,38.708006),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3749 Country Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $343900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1428 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.354799,38.717402),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8141 Otium Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $344900&lt;BR&gt;Beds:3 Baths:3&lt;BR&gt;Size:1578 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.329576,38.719867),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5808 RIDGEPOINT Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $344900&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1043 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.376174,38.708535),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3756 Blackfoot&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $344900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1428 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.365886,38.716937),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4213 Shandwick&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $349000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1365 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.35352,38.722352),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8476 Zachis Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $349000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1440 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.388133,38.723091),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3224 Groveland Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $349500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1330 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.395072,38.7059),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7649 Plaid Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $349900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1471 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.36707,38.720535),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8321 Benjamin Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $349900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1534 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.32805,38.72149),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8344 White Spruce&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $349900&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1043 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.349186,38.723634),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8780 Palmerson Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $350000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1120 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.367409,38.7193),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4204 Abigail Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $350000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1534 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.350924,38.72485),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8540 Travary Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $350000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1195 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.341523,38.705563),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5300 Tierra Vista Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $355000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1408 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.381698,38.717334),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8123 Aztec Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $356500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1456 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.384575,38.724024),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8517 Yellowtail&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $359000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1256 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.337675,38.705699),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7664 Eagle Point Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $359000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1619 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.344045,38.706463),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5301 Thomasino Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $359000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1458 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.352515,38.720263),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4824 Careo Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $359000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1521 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.374439,38.726763),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8810 Fobes Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $359000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1238 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.376345,38.721063),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3820 Sheedy Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $359000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1515 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.355466,38.725524),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4716 Winter Oak Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $359350&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1501 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.35523,38.725783),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4729 Winter Oak Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $359500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1610 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.368775,38.710099),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7861 Ivy Hill Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $359900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1468 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.350691,38.714463),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4904 Eagle Peak Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $359900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1681 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.329475,38.719055),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8353 Brewster Mill Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $359990&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1207 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.365961,38.716663),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4204 Shandwick&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $360000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1491 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.38164,38.717514),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8127 Aztec Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $361500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1518 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.391356,38.718457),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3100 Roan Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $365900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1634 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.347225,38.721015),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8341 Titian Ridge Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $367500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1341 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.352999,38.715267),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4809 Fantasia Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $367900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1550 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.380525,38.720311),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8318 Kolbus Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $369000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1725 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.391875,38.724676),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8531 El Viento&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $369000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1814 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.356786,38.725619),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4632 Winter Oak Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $369000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1595 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.328023,38.720467),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8324 White Spruce Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $369000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1330 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.360824,38.719963),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8339 Rockbury Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $369000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1575 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.358675,38.718354),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8233 Rambleton&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $369900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1568 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.381275,38.715863),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3544 Driver Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $369900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1602 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.361857,38.70505),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7633 Hepburn Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $369900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1393 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.357612,38.71922),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8333 Rambleton Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $369900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1568 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.370132,38.717712),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8163 Gloriann Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $369999&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1669 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.338881,38.7042),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5404 Heathercreek Pl&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $370000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1241 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.350403,38.724137),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8741 Palmerson&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $370000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1327 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.374914,38.727037),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8771 Fobes Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $374800&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1387 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.369323,38.720753),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8320 Lonely Hill Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $374900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1669 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.332023,38.720863),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5700 River Birch Pl&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $374900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1330 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.332861,38.720612),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8316 Tuliptree Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $374900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1261 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.386311,38.714737),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3329 Saxonville Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $375000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1235 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.35775,38.725166),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4537 WINTER OAK Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $375000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1816 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.372747,38.722613),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8453 Story Ridge Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $375000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1327 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364223,38.712686),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7910 WALERGA Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $375000&lt;BR&gt;Beds:3 Baths:3&lt;BR&gt;Size:1870 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.367377,38.7193),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4213 Abigail Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $375000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1534 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.386006,38.707081),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3451 Scotland Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $375000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1425 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.386969,38.72378),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3307 Black Eagle Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $375000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1685 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.368796,38.707331),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7741 Zephyr Hills Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $379000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1591 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.376243,38.726779),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8637 Mullein Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $379900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1387 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.354623,38.716211),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8118 Otium Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $379950&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1451 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.338174,38.72382),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5433 Elgin Hills Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $380000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1734 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.36693,38.7051),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4237 Eagle Ridge Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $380000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1360 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.366299,38.708402),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7750 Earlston Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $380000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1421 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.381971,38.718797),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3500 Lone Ridge Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $380000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1339 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.374171,38.723337),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3839 Belle Creek Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $380000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1621 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.389502,38.725585),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3318 El Castillo Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $384500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1693 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.355481,38.725801),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4713 Winter Oak Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $384500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1595 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.357672,38.71924),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8329 Rambleton Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $384888&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1766 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.356332,38.719956),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8520 Oakenshield&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $384900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1629 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.372075,38.712963),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3944 SIERRA GOLD Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $384950&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1622 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.336173,38.7191),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8233 Carriage Oaks&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $384950&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1503 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.377631,38.721063),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3720 Coniston Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $385000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1515 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.383324,38.714851),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8001 PRIOR Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $385000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1465 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.351325,38.723867),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8726 PALMERSON Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $385500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1512 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.371395,38.7178),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4008 Honey Rose Pl&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $387000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2060 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.373047,38.718359),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8208 Brick Hearth Pl&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $387000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1669 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.379143,38.726803),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8615 Aspen Ridge Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $389000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1385 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.393275,38.72352),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8515 Nandina Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $389000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1472 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.333023,38.718756),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8214 Windmill Oaks Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $389500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1503 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.357719,38.724564),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4525 Winter Oak Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $389500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1595 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.377086,38.722641),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3729 Pine Hollow Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $389900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1921 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.371476,38.712963),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3900 Sierra Gold Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $389900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1622 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.393734,38.720262),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8251 Silk Tree Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $389900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1943 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.368875,38.711258),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7860 Golden Ring Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $389900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1622 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.383225,38.71495),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8005 Prior Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $389900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1672 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.364072,38.717617),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4257 Hartlepool Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $389950&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1766 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.372579,38.705923),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3933 Little Rock Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $390000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1581 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.383235,38.717582),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8148 Prior Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $394900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1921 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.391973,38.725936),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3045 La Madera Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $394900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1693 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.378181,38.709768),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3640 Sun Maiden Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $395000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1873 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.370224,38.719847),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8246 Scrub Oak Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $395000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2060 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.362998,38.724188),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8565 Twin Trails Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $399000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1871 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.37055,38.720778),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8316 Scrub Oak Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $399000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1959 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.36407,38.72068),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8279 Dalkeith Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $399000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1575 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.33445,38.705892),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5712 Melbury Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $399000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1567 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.35157,38.721336),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4861 Lonestar Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $399500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1512 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.353859,38.72082),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8324 Cereus Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $399900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1695 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.370703,38.708499),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3954 Running Bear Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $399900&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:1915 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.340679,38.705563),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5328 Tierra Vista Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $399900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1766 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.338512,38.717563),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5420 Wooded Glen Pl&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $399900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1408 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.336052,38.724163),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5524 Redwood Burl Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $399900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1748 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.359497,38.718528),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8229 Palmerson Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $399900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1451 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.350076,38.717744),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8145 Chimango Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $399950&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1778 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.345165,38.719837),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5119 Rosbury Dell Pl&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $400000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1406 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.378723,38.722973),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8436 Rapozo Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $400000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1925 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.376196,38.715263),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3754 Stauss Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $404000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1839 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.396475,38.724933),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8531 Sadie Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $405000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2021 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.353976,38.717877),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8225 Filifera Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $405000&lt;BR&gt;Beds:5 Baths:3&lt;BR&gt;Size:1768 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.390723,38.723026),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8438 Leaning Tree Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $405000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1816 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.355544,38.725806),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4709 Winter Oak Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $406500&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1816 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.372494,38.709537),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3929 Country Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $408500&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:1915 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.351905,38.721336),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4845 Lonestar Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $409000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1814 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.390723,38.723056),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8442 Leaning Tree Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $409999&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2011 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.380623,38.724947),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8409 Giverny Circle&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $410000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1504 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.385799,38.724276),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3333 Grass Creek Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $410000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1693 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.344773,38.715262),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5126 Vista Sierra Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $410000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1695 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.371221,38.725504),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9248 Redwater Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $410000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1893 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.371775,38.725354),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8625 Dixie Canyon Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $410000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1893 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.370661,38.70454),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4162 Country Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $410000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:1915 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.357823,38.722975),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8448 Palmerson Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $410000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1657 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.334448,38.719637),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8319 Carriage Oaks Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $414900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1760 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.33287,38.722448),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8410 MISTY VALLEY Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $414950&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1714 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.380584,38.725337),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3601 Merano Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $415000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1656 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.391377,38.718736),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3117 Roan Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $415000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2017 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.344262,38.710038),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5200 Whitetail Run Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $415000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1705 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.342999,38.719891),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8262 HEATH PEAK Pl&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $415888&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1877 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.335133,38.704718),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5601 Melbury Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $416990&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1714 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.386286,38.718463),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3314 Gray Mare Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $418900&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2134 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.393275,38.722028),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8407 Nandina Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $419000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2015 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.372364,38.72),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8305 Fountainhead Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $419500&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2060 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.367023,38.712684),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8032 Golden Ring Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $419900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1622 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.393746,38.722085),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8406 Deer Fern Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $419900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2015 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.345721,38.707537),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5101 Antler Hollow Pl&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $419990&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1705 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.377862,38.723294),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8538 Shadow Crest Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $420000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1921 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.394626,38.718763),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2934 Tamarind Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $424800&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1736 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.380275,38.72393),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8513 Giverny Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $424900&lt;BR&gt;Beds:3 Baths:3&lt;BR&gt;Size:1970 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.358109,38.720416),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8316 Palmerson Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $424950&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1907 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.354423,38.722807),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4905 Winter Oak Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $424990&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1657 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.345175,38.709201),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7821 Antelope Run Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $424999&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1705 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.377862,38.723294),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8538 Shadow Crest Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $425000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1921 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.381825,38.724131),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8520 Wedgestone Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $429900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2189 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.340583,38.723247),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9013 Palmerson Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $429900&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2047 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.357571,38.720088),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8601 Oakenshield Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $429900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1907 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.345273,38.719837),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5111 Rosbury Dell Pl&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $429900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1406 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.336054,38.704422),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7720 Ravensworth Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $429900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1261 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.391413,38.724063),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3042 Black Eagle Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $430000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1693 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.381814,38.723062),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8446 Staghorn Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $432000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1711 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.370042,38.716038),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8053 Cantata Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $435000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2159 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.375252,38.723739),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8539 Morning Skye Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $435000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2011 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.38972,38.728137),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3145 Spruce Hill Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $435000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:1819 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.380275,38.724035),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8521 Giverny Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $435000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1915 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.375175,38.725542),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8613 Morning Skye Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $435000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2011 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.395505,38.722563),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2904 Arabis Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $435000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2015 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.362245,38.720357),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8353 Dalkeith Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $435000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2083 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.387658,38.717242),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3237 Boulder Creek Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $435000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2297 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.337049,38.722437),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5445 Torquay Pl&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $435900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1841 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.367158,38.723348),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4130 Lake Placid Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $437000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:1939 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.359974,38.718833),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8204 Rockbury Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $437000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2135 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.394124,38.724092),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3001 Tourmaline Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $438000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1894 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.362831,38.709187),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7805 Megan Ann Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $438700&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:2268 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.370474,38.718637),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4021 Grey Livery Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $439000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2060 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.344528,38.710434),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7841 Scheidler Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $439000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1941 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.372899,38.72185),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8409 Northcreek Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $439500&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:1998 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.351025,38.717651),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8132 Falcon View Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $439900&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2364 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.367124,38.722137),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4145 Munich Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $439950&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:1939 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.35991,38.723986),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8525 Longspur Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $439990&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2087 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.379675,38.724714),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8416 Thornbury Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $439990&lt;BR&gt;Beds:5 Baths:2&lt;BR&gt;Size:2189 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.360946,38.723323),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8512 Journeys End Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $440000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1872 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.342527,38.711834),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7908 Gazelle Trail&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $444900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1965 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.345599,38.721512),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8353 Clear Corrie Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $445000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2047 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.34523,38.71611),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5115 Rolling Field Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $447900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1841 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.369475,38.71558),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8041 Quiet Knolls Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $449000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2097 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.362887,38.719509),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8224 Dalkeith Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $449000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1950 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.388579,38.723827),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3212 Black Eagle&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $449000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2020 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.379994,38.722737),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3605 Pine Hollow Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $449500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1925 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.339599,38.724062),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8522 Scotswood&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $449900&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2047 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.370174,38.723263),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8300 Story Ridge Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $450000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2141 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.340061,38.724463),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5327 Elgin Hills Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $454000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1759 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.375335,38.719843),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8313 Brixham Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $454950&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:2166 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.356616,38.723978),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8538 Palmerson Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $455000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2136 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.349211,38.71694),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8127 Kate Glen Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $455000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2151 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.35444,38.715635),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8020 Otium Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $458000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:1768 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.332822,38.723522),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8448 Misty Valley Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $459000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1714 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.352689,38.720933),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8352 Elegans Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $459000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2028 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.337822,38.724007),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5420 Elgin Hills Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $459900&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2047 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.338899,38.72414),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8501 Sienna Fell Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $459900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1877 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.356214,38.722586),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4624 HIDEAWAY Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $460000&lt;BR&gt;Beds:5 Baths:3&lt;BR&gt;Size:2136 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.369275,38.717055),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8121 Quiet Knolls Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $460500&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2060 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.367226,38.709052),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7965 Ivy Hill Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $464990&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:1897 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.347189,38.72514),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8633 Meandering Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $465000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1875 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.334225,38.718828),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8221 Madrone Woods Pl&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $466990&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2216 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.357371,38.708567),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7754 Truffle Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $467900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2326 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.373175,38.713329),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4012 Sierra Gold Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $469900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1927 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.371123,38.713559),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7944 Red Ruby Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $473000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2131 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.367023,38.711796),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7956 Golden Ring Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $474900&lt;BR&gt;Beds:5 Baths:2&lt;BR&gt;Size:2500 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.369339,38.723964),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9328 Redwater Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $474900&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2280 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.349724,38.715486),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8038 Ackerson Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $475000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2563 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.370126,38.713237),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3825 Sierra Gold Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $478900&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2392 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.356523,38.708446),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7758 Mist Trail Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $479950&lt;BR&gt;Beds:5 Baths:2&lt;BR&gt;Size:2504 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.368793,38.71292),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7805 Golden Ring Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $480000&lt;BR&gt;Beds:5 Baths:3&lt;BR&gt;Size:2392 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.357371,38.708567),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7754 Truffle Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $487000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2326 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.342323,38.723864),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8506 Windford Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $489900&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2473 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.371802,38.712963),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3924 Sierra Gold Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $489990&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2500 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.333723,38.723663),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8529 Misty Valley&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $490000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1714 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.359324,38.709641),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4504 Winje Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $494000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2504 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.357904,38.707963),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4430 WOODHAWK Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $495000&lt;BR&gt;Beds:5 Baths:3&lt;BR&gt;Size:2504 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.357371,38.708567),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7754 Truffle Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $499000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2326 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.333834,38.719662),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8331 Carriage Oaks Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $499750&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2216 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.337702,38.720537),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5429 Pearlstone Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $499900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2832 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.370981,38.708484),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3942 Running Bear Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $499950&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:1915 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.336623,38.718563),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8212 Cook Riolo Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $499999&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2216 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.344833,38.712056),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7913 Fawn Trail Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $505000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2690 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.373175,38.71327),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4004 Sierra Gold Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $509950&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2131 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.345147,38.708237),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7755 Antelope Run Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $510000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:2479 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.345599,38.721499),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8349 Clear Corrie Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $515000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2500 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.33646,38.722147),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5524 GREAT VALLEY Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $520000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2009 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.338235,38.709963),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5422 Beauford Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $524980&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2399 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.35973,38.708663),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4240 Winje Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $534900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2504 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.361339,38.708241),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7728 MEGAN ANN WAY&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $536000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2504 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.339775,38.714411),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9348 Palmerson Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $544900&lt;BR&gt;Beds:5 Baths:3&lt;BR&gt;Size:2451 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.362351,38.708941),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7796 Megan Ann Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $547000&lt;BR&gt;Beds:5 Baths:3&lt;BR&gt;Size:2960 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.344294,38.707963),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5144 Fawn Valley Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $549000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2605 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.358327,38.709367),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4545 Winje Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $549000&lt;BR&gt;Beds:5 Baths:2&lt;BR&gt;Size:2504 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.345585,38.716765),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5105 Homeland Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $549000&lt;BR&gt;Beds:5 Baths:3&lt;BR&gt;Size:2500 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.393675,38.724259),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8530 Krans Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $549000&lt;BR&gt;Beds:5 Baths:3&lt;BR&gt;Size:3050 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.345711,38.707537),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5105 Antler Hollow Pl&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $549995&lt;BR&gt;Beds:5 Baths:3&lt;BR&gt;Size:2889 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.359008,38.709367),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4517 Winje&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $550000&lt;BR&gt;Beds:5 Baths:2&lt;BR&gt;Size:2504 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.343781,38.711799),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7913 Doe Trail Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $556000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2690 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.344087,38.713502),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5211 Fawn Hollow Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $559900&lt;BR&gt;Beds:5 Baths:3&lt;BR&gt;Size:3134 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.344173,38.712837),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5140 Fawn Crossing Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $559950&lt;BR&gt;Beds:5 Baths:3&lt;BR&gt;Size:3134 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.344275,38.715679),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8043 Golden Vista Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $579900&lt;BR&gt;Beds:6 Baths:3&lt;BR&gt;Size:3112 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.36174,38.707966),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7741 Megan Ann Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $595000&lt;BR&gt;Beds:3 Baths:3&lt;BR&gt;Size:2960 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.345374,38.716075),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5101 Rolling Field Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $597000&lt;BR&gt;Beds:6 Baths:3&lt;BR&gt;Size:3112 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.337001,38.721363),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5444 Avonlea Pl&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $599000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:2832 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.33173,38.724138),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8436 Arrowroot Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $599000&lt;BR&gt;Beds:5 Baths:3&lt;BR&gt;Size:2832 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.3648,38.7159),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7729 Agate Beach Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $601650&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:3152 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.3648,38.7159),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7724 Agate Beach Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $606570&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:3152 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.345123,38.70726),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7730 Antelope Run Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $615000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:3174 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.33855,38.712881),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9417 Palmerson Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $629000&lt;BR&gt;Beds:4 Baths:3&lt;BR&gt;Size:2451 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.3648,38.7159),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;7717 Agate Beach Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $640030&lt;BR&gt;Beds:6 Baths:4&lt;BR&gt;Size:3606 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.338723,38.713304),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5412 Old England Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $685000&lt;BR&gt;Beds:5 Baths:3&lt;BR&gt;Size:3000 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.333841,38.710663),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5760 Poker Ln&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $799000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:2634 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.333023,38.718722),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8210 Windmill Oaks Pl&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $799950&lt;BR&gt;Beds:4 Baths:4&lt;BR&gt;Size:4123 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));}function createMarker(point, infotext){var marker = new GMarker(point);GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(infotext);});return marker;}&lt;/script&gt;

&lt;div id="google_map" style="width: 550px; height: 500px;"&gt;&lt;/div&gt;

Antelope
Date: April 8, 2006
Homes on Map: 297

Use the menu on the right for more maps&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8585651-114452821848433788?l=nitricacid.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nitricacid.blogspot.com/feeds/114452821848433788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8585651&amp;postID=114452821848433788&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/114452821848433788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8585651/posts/default/114452821848433788'/><link rel='alternate' type='text/html' href='http://nitricacid.blogspot.com/2006/04/antelope-homes-for-sale-4-8-06.html' title='Antelope Homes For Sale (4-8-06)'/><author><name>Max</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8585651.post-114452596007799636</id><published>2006-04-08T12:52:00.000-07:00</published><updated>2006-04-08T12:54:32.070-07:00</updated><title type='text'>Rancho Cordova - Gold River Homes For Sale (4-8-06)</title><content type='html'>&lt;script src="http://maps.google.com/maps?file=api&amp;v=1&amp;key=ABQIAAAAZ4mydILXmUipbaSGs85fTRSHEq5_3QxTfXM--pVCjyRpntjy-hSMaElf6ZNa6FazC2L2OKUIdDxjzQ" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt; function map_details(){ var map = new GMap(document.getElementById("google_map")); map.addControl(new GLargeMapControl()); map.addControl(new GMapTypeControl());map.centerAndZoom(new GPoint(-121.29730224609375,38.566690048620025),5);map.addOverlay(createMarker(new GPoint(-121.357824,38.544514),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3715 Tallyho&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $157990&lt;BR&gt;Beds:1 Baths:1&lt;BR&gt;Size:630 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.359147,38.542594),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9149 Newhall Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $165000&lt;BR&gt;Beds:1 Baths:1&lt;BR&gt;Size:611 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.359655,38.542569),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9131 Newhall Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $167000&lt;BR&gt;Beds:1 Baths:1&lt;BR&gt;Size:611 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.370223,38.558181),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9029 El Cajon Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $177000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:795 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.370574,38.558119),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9032 El Cajon Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $180000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:840 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.285857,38.616148),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2016 Benita Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $182500&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:840 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.370577,38.557305),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9041 Casals St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $185000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:795 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.286345,38.61597),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2040 Benita Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $185000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:840 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.370074,38.558241),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9045 El Cajon Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $187500&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:795 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.371151,38.557246),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9025 Casals St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $189900&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:840 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.286278,38.614862),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10795 Coloma&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $190000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:840 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.285498,38.615164),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10815 Coloma Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $190000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:795 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.369725,38.559131),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9021 Montoya St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $190000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:840 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.28597,38.614985),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10803 COLOMA ROAD&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $190000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:840 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.285811,38.615047),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10807 Coloma&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $192000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:840 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.285485,38.615981),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2005 Benita Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $192000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:795 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.285655,38.615106),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10811 Coloma Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $192000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:924 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.285973,38.615803),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2029 Benita Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $192900&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:840 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.370662,38.558494),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9012 El Cajon Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $195000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:840 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.371438,38.557217),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9017 Casals St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $195000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:840 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.369436,38.558884),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9028 Montoya St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $197900&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:924 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.37072,38.55729),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9037 Casals St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $199000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:840 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.281393,38.616665),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10889 COLOMA&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $199000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:896 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.384284,38.564084),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8619 LA RIVIERA Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $199000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:897 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.359147,38.542594),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9149 Newhall Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $199950&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:875 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.359034,38.5426),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9153 Newhall Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $199950&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:875 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.384655,38.56403),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8615 La Riviera Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $207000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:897 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.361074,38.542537),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9101 Newhall Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $208000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:1036 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.284308,38.616712),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;1978 Benita&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $210000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1116 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.383278,38.564181),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8625 La Riviera Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $214900&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:897 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.359881,38.542558),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9123 Newhall Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $215000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:875 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.361074,38.542537),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9101 Newhall Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $215000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:1026 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.391123,38.55043),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3137 Occidental Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $215000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:795 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.361074,38.542537),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9101 Newhall Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $216900&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:1036 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.359994,38.542553),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9119 Newhall Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $219900&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:1140 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.3725,38.563537),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8845 La Riviera Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $220000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:1014 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.359655,38.542569),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9131 Newhall Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $224950&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:1140 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.281393,38.616665),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10885 Coloma Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $225000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:1116 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.361074,38.542537),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9101 Newhall Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $225000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:1026 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.280926,38.616785),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10915 Coloma Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $229000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:896 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.359034,38.5426),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9153 Newhall Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $229999&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:875 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.283426,38.61673),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;1961 Benita Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $234000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1323 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.372453,38.563263),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8848 La Riviera Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $235000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:1014 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.376435,38.565376),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8733 Woodman Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $235000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:1014 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.282564,38.617043),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;1941 Benita Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $239900&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1323 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.359034,38.5426),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9153 Newhall Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $245000&lt;BR&gt;Beds:2 Baths:1&lt;BR&gt;Size:875 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.270423,38.621189),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;11150 Trinity River Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $245000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:968 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.372578,38.563263),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8840 La Riviera Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $249000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1191 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.276858,38.615686),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2251 Bridlewood Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $249500&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1031 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.270423,38.621189),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;11150 Trinity River Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $249900&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:941 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.281169,38.616917),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;1904 Benita Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $249900&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1323 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.281307,38.617194),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;1912 BENITA Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $249900&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1323 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.376059,38.561957),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8811 Salmon Falls Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $249950&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1191 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.270423,38.621189),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;11150 Trinity River Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $255000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:940 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.301238,38.596861),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2509 Ganzan Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $255000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:924 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.270423,38.621189),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;11150 Trinity River Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $259000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1005 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.270423,38.621189),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;11150 Trinity River Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $264500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1240 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.270423,38.621189),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;11150 Trinity River Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $264900&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:944 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.270423,38.621189),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;11150 Trinity River Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $268500&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:941 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.314563,38.586759),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10125 Malaga Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $269900&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1236 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.270423,38.621189),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;11150 Trinity River Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $269900&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:940 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.372905,38.563219),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8816 LA RIVIERA Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $270999&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1518 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.372662,38.563266),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8832 La Riviera Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $271900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1518 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.344323,38.552557),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3640 Gold Creek Ln&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $274000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1114 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.305399,38.582609),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2943 Betlen Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $274900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1256 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.344674,38.552746),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3627 Gold Creek Ln&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $279000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1020 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.270423,38.621189),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;11150 Trinity River Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $284000&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:941 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.2791,38.616365),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2203 Elmcrest Ln&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $284900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1579 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.344511,38.554274),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3522 Gold Creek Ln&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $289900&lt;BR&gt;Beds:2 Baths:2&lt;BR&gt;Size:1114 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.300986,38.595415),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2553 Tannat Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $289900&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:924 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.325099,38.562023),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9969 Redstone&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $289950&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1128 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.326871,38.566735),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3324 Polaris Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $290000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1308 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.324078,38.562306),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3517 Solar Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $294950&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1092 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.294602,38.591816),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2908 Hunt Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $295000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1344 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.299541,38.577194),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10525 Abbottford&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $295000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1040 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.295425,38.589742),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2941 Mills Park&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $295000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1130 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.348674,38.5484),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3912 Millican Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $295000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1025 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.276636,38.617038),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2251 Baywater Ln&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $295000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1310 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.299665,38.576898),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10501 Abbottford Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $295000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1124 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.317243,38.59248),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2438 El Lujo Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $297000&lt;BR&gt;Beds:3 Baths:3&lt;BR&gt;Size:1701 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.323954,38.559255),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9922 BURLINE St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $299000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1092 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.323516,38.567855),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9940 Vanguard&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $299000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1168 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.292907,38.602019),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2507 Aramon Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $299000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1465 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.31434,38.589965),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2581 La Cumbra Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $299500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1240 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.367167,38.552537),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9021 Rosewood Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $299500&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:988 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.302144,38.577737),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10445 Abington&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $299500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1450 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.36464,38.547899),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3552 Imperial Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $299900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1196 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.300523,38.576252),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3261 Chettenham Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $299900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1008 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.324106,38.562334),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3513 Solar Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $299950&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1045 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.301686,38.604858),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10414 Georgetown Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $299950&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1020 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.295171,38.597643),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2656 Aramon Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $299999&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1000 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.342493,38.572208),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9524 Bedington Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $300000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1275 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.440211,38.526933),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;5321 56th St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $300000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1161 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.294168,38.598439),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2629 Aramon Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $300000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1678 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.351924,38.568372),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2639 Topeka Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $304999&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1297 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.295425,38.590185),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2929 Mills Park Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $305000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1586 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.305923,38.584614),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2963 Joerger St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $305000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1008 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.302388,38.595191),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2524 Tormolo Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $305950&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1000 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.340106,38.56079),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9599 Meadowgreen Cir&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $307000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1009 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.322532,38.560204),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3620 SARAMENT Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $307999&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1100 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.346932,38.571731),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2620 KANSAS Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $309000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1130 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.298374,38.588337),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10499 Spaulding Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $309000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1064 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.303381,38.585563),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10408 White Rock Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $309000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1667 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.303379,38.595468),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10420 Dolecetto&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $309000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1000 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.278223,38.608577),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2421 Berrywood Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $309000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1157 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.2892,38.599698),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2620 Riesling Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $309750&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1000 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.330322,38.564737),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9797 Woodhollow Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $309900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1213 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.32463,38.558606),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9909 Old Placerville Rd&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $309950&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1304 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.322771,38.559946),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9949 Burline St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $309999&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1092 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.288873,38.615411),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2140 WOODLAWN Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $310000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1063 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.324941,38.563482),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9969 Lincoln Village Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $310000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1128 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.301513,38.594803),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2607 Tormolo Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $310000&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1219 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.32272,38.559658),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9946 Burline St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $312900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1092 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.305346,38.583637),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10347 Birmingham Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $313000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1008 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.349959,38.571628),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9396 Mira Del Rio&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $314000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1148 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.350434,38.570162),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9382 Deeth Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $314900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1148 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.308656,38.596237),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10305 Doyle Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $315000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1185 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.376754,38.561759),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2512 Mackinaw Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $315000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:944 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.350524,38.54658),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3937 Arderly Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $315000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1226 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.325275,38.560897),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3668 Scorpio Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $315000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1092 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.298629,38.595807),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2600 Furmint Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $315000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1078 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.326378,38.559063),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9862 Burline St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $315000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1092 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.28882,38.607413),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10628 Campana Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $316000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1112 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.329723,38.565763),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9800 Heartwood Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $317500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1158 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.302481,38.577737),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10437 Abington Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $318000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1008 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.309614,38.569498),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3474 Nut Plains Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $318000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1170 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.36844,38.543041),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3917 Bairnsdale Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $318500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1090 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.354174,38.549838),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3617 Huntsman Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $319000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1022 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.367669,38.546837),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3521 Lindenwood Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $319000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1293 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.369215,38.555393),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8923 Trujillo Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $319900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1200 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.300382,38.59783),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2510 Furmint Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $319900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1263 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.298728,38.610951),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2132 Farnsworth Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $319900&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1085 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.326042,38.563762),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9940 Nebula Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $319900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1338 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.270423,38.621189),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;11150 Trinity River Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $319950&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1324 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.355424,38.541845),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4005 Ashgrove Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $319950&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1497 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.368993,38.540163),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8956 Gainsboro&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $319990&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1424 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.310942,38.569037),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10247 Ellenwood Ave&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $319999&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1170 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.316729,38.593755),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2337 La Loma Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $320000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1167 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.363074,38.538568),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4356 Thunder Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $322000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1254 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.299722,38.592702),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10420 CROETTO Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $323000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1560 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.311694,38.569736),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10239 Sunol&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $323000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1196 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.312725,38.598818),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10241 Octavia Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $324000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1129 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.321378,38.582163),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2765 Tierra Grande&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $324900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1501 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.349318,38.556408),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3350 Zorina Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $324900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1260 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.349449,38.548325),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9336 Mirandy Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $324900&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1339 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.284917,38.601777),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2623 Angie Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $324900&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1075 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.367924,38.546389),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3513 Coralwood Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $324995&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1158 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.322247,38.559808),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9954 Burline St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $325000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1304 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.288177,38.611844),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10753 Carlos Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $325000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1239 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.327523,38.566365),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3309 Virgo St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $325000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1402 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.329324,38.559337),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9781 Burline St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $325000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1257 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.291369,38.590894),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2968 Kachina Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $325000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1404 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.332884,38.574994),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2844 Londonderry&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $325000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1363 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.309375,38.581384),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3024 Ramsgate Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $325000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1253 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.349022,38.556707),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3339 Zorina Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $325000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1418 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.308977,38.590791),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2648 Dawes St&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $325000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1225 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.288327,38.611694),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10745 Carlos Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $325000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1239 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.279238,38.617212),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10062 Kern River Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $325000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1312 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.350111,38.554964),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9201 Medallion Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $325000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1260 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.305878,38.592462),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2635 Garrett Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $325000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1521 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.310763,38.569037),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10255 ELLENWOOD&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $325500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1170 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.28502,38.547333),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4319 Monhegan&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $328500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1139 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.349823,38.570441),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9378 Mira Del Rio Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $329000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1148 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.28693,38.607097),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2324 Byrd Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $329000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1097 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.354438,38.540265),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;4124 Westporter Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $329000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1296 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.311211,38.569037),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10235 Ellenwood Ave&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $329000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1254 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.345781,38.573285),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9472 Alcosta Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $329000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1297 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.352754,38.543854),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9245 Henley Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $329000&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1748 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.330604,38.564737),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;9785 Woodhollow Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $329500&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1402 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.361907,38.56521),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2618 Cedaridge Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $329900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1256 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.292118,38.601162),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2519 Barbera Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $329900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1448 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.370349,38.552963),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;8940 Talisman Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $329900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1288 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.270423,38.621189),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;11150 Trinity River Dr&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $329900&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1240 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.292276,38.592986),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2905 Calle Del Sol Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $329950&lt;BR&gt;Beds:4 Baths:2&lt;BR&gt;Size:1300 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.336623,38.560292),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3431 Duzel Rock Pl&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $329999&lt;BR&gt;Beds:3 Baths:1&lt;BR&gt;Size:1009 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.337523,38.560432),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;3405 Jutewood Ct&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $330000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1163 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.336981,38.576908),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;2720 Escobar Way&lt;/div&gt;&lt;div id=\"MapBuilderIWContent\"&gt;Price: $330000&lt;BR&gt;Beds:3 Baths:2&lt;BR&gt;Size:1465 SQFT&lt;/DIV&gt;&lt;/DIV&gt;'));map.addOverlay(createMarker(new GPoint(-121.276927,38.606001),'&lt;div id=\"MapBuilderIW\"&gt;&lt;div id=\"MapBuilderIWCaption\"&gt;10951 Hirschfeld Way&lt;/d
