// JavaScript Document
function createRequest() {try {request=new XMLHttpRequest();} catch (trymicrosoft) {var axO=['Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.4.0', 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP'];for(var i=0;i<axO.length;i++) {try{request=new ActiveXObject(axO[i]);} catch (failed) {request=null;}}}if (request==null) {alert('Error creating request object!');} else {return request;}}

function list(Mfrm, a, listof, filter) {
	var request = createRequest();
	var url = "art/search/search_townlist.asp";
	if (request != null) {
		
		request.open('post', url, true);

		request.onreadystatechange = function () {//SavingMyData;
			//alert(request.readyState);
			if (request.readyState == 4) {
				//alert(request.status);
				if (request.status == 200) {
					//alert(request.responseText);
					var jsonRspns=request.responseText.parseJSON();
					switch(listof) {
						case "mytowns":
							displayTown(jsonRspns, Mfrm.town);
							Mfrm.county.value = filter;
							break;
						case "zip":
							//alert(request.responseText);
							displayTown(jsonRspns, Mfrm.town);
							Mfrm.county.value = filter;
							
							//SelectMe(document.form1,document.form1.sf);
							if (IsVisable('mapof')==true) {
								swapViews('zip', Mfrm)
							}
							break;
						case "town":
							displayTown(jsonRspns, Mfrm.town);
							Mfrm.county.value = filter;
							
							SelectMe(document.form1,document.form1.sf);
							
							toggle('mapof');
							toggle('criteria');
							break;
						case "townall":
							displayTown(jsonRspns, Mfrm.town);
							break;
						case "county":
							displayCounty(jsonRspns, document.getElementById("countydiv"), Mfrm, a);
							break;
						default:
							displayState(jsonRspns, Mfrm.state);
							//list(Mfrm, a, 'townall', Mfrm.state[Mfrm.state.selectedIndex].value);
							//list(Mfrm, a, 'county', Mfrm.state[Mfrm.state.selectedIndex].value);
					}
				}
			}
		}
		request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		var l = ""
		l+="agentid=" + escape(a);
		l+="&listof=" + escape(listof);
		l+="&filter=" + escape(filter);
		if (listof == "town" || listof == 'zip') {
			l+="&state=" + escape(Mfrm.state[Mfrm.state.selectedIndex].value);
		} else if (listof == "state") {
			l+="&state=" + escape(filter);
		}
		request.send(l);
	}
}

function selectTown(text, Mfrm) {
	addValue(Mfrm, text, false);
}

function changeInState(Mfrm, a) {
	list(Mfrm, a, 'townall', Mfrm.state[Mfrm.state.selectedIndex].value);
	list(Mfrm, a, 'county', Mfrm.state[Mfrm.state.selectedIndex].value);
}

function displayState(st, Mfrm) {
	//var st = d.parseJSON();
	var s;
	for (var i=0;i<st.list[0].statelist.length;i++) {
		popValue(st.list[0].statelist[i].abbr, st.list[0].statelist[i].state, st.list[0].statelist[i].selected, Mfrm);
		if (st.list[0].statelist[i].selected.length>0) {
			s = st.list[0].statelist[i].abbr;	
		}
	}
}

function displayCounty(l, layer, Mfrm, a) {
	var oTable = document.createElement("TABLE");
		oTable.width="100%";
		oTable.cellPadding=0;
		oTable.cellSpacing=0;
		oTable.border=0;
		oTable.Valign="top";
		oTable.align="center";
		//oTable.className="tableStyleClients";
		var oTBody = document.createElement("TBODY");
		oTable.appendChild(oTBody);
	var oRow, oCell;
		oRow = document.createElement("TR");
		oTBody.appendChild(oRow);
			oCell = BuildCell("Filter by County",2);
			oCell.className = "tableText";
		oRow.appendChild(oCell);
		
		/*oRow = document.createElement("TR");
		oTBody.appendChild(oRow);
			oCell = BuildCell("All Towns",0);
			oCell.className = "tableTextBlue";
			oCell.onclick = function () {list(document.form1, eval(a), 'townall', document.form1.state[document.form1.state.selectedIndex].value)}
		oRow.appendChild(oCell);
		*/
		for (var i=0;i<l.list[0].countylist.length;i++) {
			oRow = document.createElement("TR");
			oTBody.appendChild(oRow);
				oCell = BuildCell(l.list[0].countylist[i].name,0);
				oCell.className = "tableTextBlue";
				oCell.onclick = function () {list(document.form1, eval(a), 'town', this.innerHTML)}
			oRow.appendChild(oCell);
		}
		
	layer.innerHTML = '';
	layer.appendChild(oTable);
}

function displayTown(l, Mfrm) {
	for (var q=Mfrm.options.length;q>=0;q--) {Mfrm.options[q]=null;}
	if (navigator.appName!='Microsoft Internet Explorer') {var blnk='--';} else {var blnk='   ';}
	for (var i=0;i<l.list[0].town.length;i++) {
		popValue(l.list[0].town[i].value,l.list[0].town[i].name,'',Mfrm);
		if (l.list[0].town[i].sub.length>0) {
			for (var a=0;a<l.list[0].town[i].sub.length;a++) {
				popValue(l.list[0].town[i].sub[a].value,blnk + l.list[0].town[i].sub[a].area,'',Mfrm);
			}
		}
	}
}

function removeMe(Mfrm) {
	var boxLength=Mfrm.length;
	arrSelected=new Array();
	var count=0;
	for (i=0; i < boxLength; i++) {
		if (Mfrm.options[i].selected) {
			arrSelected[count]=Mfrm.options[i].value;
		}
		count++;
	}
	var x;
	for (i=0; i < boxLength; i++) {
		for (x=0; x < arrSelected.length; x++) {
			if (Mfrm.options[i].value==arrSelected[x]) {
				Mfrm.options[i]=null;
			}
		}
		boxLength=Mfrm.length;
	}
}

function swapViews(show, Mfrm) {
	if (show!='zip') {
		list(document.form1,document.form1.agentid.value,'mytowns','');
	}
	if (show!='map') {
		if (IsVisable('mapof')==true) {
			toggle('mapof');toggle('towndiv');toggle('townselectdiv');
			for (var i=0; i<Mfrm.txttown.length;i++) {
				try {
					var useT
					if (Mfrm.txttown.options[i].value.substring(0,1)==0) {
						useT = "Z" + Mfrm.txttown.options[i].value;
					} else {
						useT = Mfrm.txttown.options[i].value.replace(/ /g,'');
					}
					eval("dd.elements."+useT.replace(':MA','')+"pin.hide()");	
				} catch(err) {
					
				}
			}
		}
	} else {
		if (IsVisable('mapof')==false) {
			toggle('mapof');toggle('towndiv');toggle('townselectdiv');
			for (var i=0; i<Mfrm.txttown.length;i++) {
				try {
					var useT
					if (Mfrm.txttown.options[i].value.substring(0,1)==0) {
						useT = "Z" + Mfrm.txttown.options[i].value;
					} else {
						useT = Mfrm.txttown.options[i].value.replace(/ /g,'');
					}
					eval("dd.elements."+useT.replace(':MA','')+"pin.show()");	
				} catch(err) {
					
				}
			}
		}
	}
}

function startover(Mfrm) {
	do {
		try {
			if (Mfrm.txttown.options[0].value.substring(0,1)==0) {
				useT = "Z" + Mfrm.txttown.options[0].value;
			} else {
				useT = Mfrm.txttown.options[0].value.replace(/ /g,'');
			}
			eval("dd.elements."+useT.replace(/ /g,'').replace(':MA','')+"pin.hide()");
		} catch(err) {
		}		
		Mfrm.txttown.options[0]=null;
	} while (Mfrm.txttown.length > 0)
	for(i = 0; i < Mfrm.elements.length; i++) {
		elm = Mfrm.elements[i];
		if (elm.name == 'oh') {
			elm.checked = false;
		} else if (elm.type == 'checkbox' && elm.name == 'sf') {
			elm.checked = true;
		} else if (elm.type == 'checkbox' && elm.name != 'oh') {
			elm.checked = false;
		} else if (elm.name == 'txtMaxPrice') {
			elm.value = '';
			//elm.type = 'text';
		} else if(elm.name == 'txtMinPrice' || elm.name == 'mf') {
			elm.value='';
			elm.readOnly = false;
		} else if (elm.name == 'txtMinAcres' || elm.name == 'txtMinBaths' || elm.name == 'txtMinBeds') {
			elm.selectedIndex=0;
		}
	}
	document.getElementById("MaxPrice").innerHTML = '<input name="txtMaxPrice" type="text" class="tableText" size="10" />';
	//toggle('criteria');
	try {
		if (document.getElementById("mapof").style.display=='none') {
			toggle('mapof');
		}
		
		if (document.getElementById("criteria").style.display!='none') {
			toggle('criteria');
		}
	} catch(err) {
	}
}


function selectAllOptions(obj) {
	if (!hasOptions(obj)) {
		alert("Please choose at least one town or neighborhood");
		return false;
	} else {
		for (var i=0; i<obj.options.length; i++) {
			obj.options[i].selected = true;
		}
		return true;
	}
}

function SingleSelect(regex,current) {
	re = new RegExp(regex);
	for(i = 0; i < document.forms[0].elements.length; i++) {
		elm = document.forms[0].elements[i];
		if (elm.type == 'checkbox') {
			if (re.test(elm.name)) {
				elm.checked = false;
			}
		}
	}
	current.checked = true;
}

function SelectMe(Mfrm, c) {
	if (c.name == 'sf') {
		if (c.checked) {
			for(i = 0; i < Mfrm.elements.length; i++) {
				elm = Mfrm.elements[i];
				if (elm.type == 'checkbox' && elm.name == 'units') {
					elm.checked = false;
				}
			}
			Mfrm.mf.value='';
			Mfrm.cc.checked = false;
		}
		var pt = 'sf';
	} else if (c.name == 'cc') {
		if (c.checked) {
			for(i = 0; i < Mfrm.elements.length; i++) {
				elm = Mfrm.elements[i];
				if (elm.type == 'checkbox' && elm.name == 'units') {
					elm.checked = false;
				}
			}
			Mfrm.mf.value='';
			Mfrm.sf.checked = false;
		}
		var pt = 'sf';
	} else {
		Mfrm.sf.checked = false;
		Mfrm.cc.checked = false;
		for(i = 0; i < Mfrm.elements.length; i++) {
			elm = Mfrm.elements[i];
			if (elm.type == 'checkbox' && elm.name == 'units' && elm != c) {
				elm.checked = false;
			}
		}
		var pt = 'mf';
		var u = c.value;
	}
	//PullPrice(Mfrm, pt, u);
}

function PullPrice(Mfrm, pt, u) {
	//Mfrm.txtMaxPrice.value = "masshousing";
	//Mfrm.txtMaxPrice.type = "hidden";
	var l = document.getElementById("MaxPrice");
	l.innerHTML = 'Determined by Mass Housing<input name="txtMaxPrice" type="hidden" class="tableText" size="10" value="masshousing" />';
	/*
	var c = Mfrm.county.value;
	switch (c.toLowerCase()) {
		case "barnstable":
			if (pt.toLowerCase() == 'sf') {
				Mfrm.txtMaxPrice.value = '$387,000';
			} else {
				switch (u) {
					case "2":
						Mfrm.txtMaxPrice.value = '$434,895';
						break;
					default:
						Mfrm.txtMaxPrice.value = '$528,377';					
				}
			}
			Mfrm.txtMaxPrice.readOnly=true;
			break;
		case "dukes":
			if (pt.toLowerCase() == 'sf') {
				Mfrm.txtMaxPrice.value = '$387,000';
			} else {
				switch (u) {
					case "2":
						Mfrm.txtMaxPrice.value = '$493,482';
						break;
					default:
						Mfrm.txtMaxPrice.value = '$596,436';					
				}
			}
			Mfrm.txtMaxPrice.readOnly=true;
			break;
		case "nantucket":
			if (pt.toLowerCase() == 'sf') {
				Mfrm.txtMaxPrice.value = '$414,000';
			} else {
				switch (u) {
					case "2":
						Mfrm.txtMaxPrice.value = '$528,731';
						break;
					default:
						Mfrm.txtMaxPrice.value = '$639,038';					
				}
			}
			Mfrm.txtMaxPrice.readOnly=true;
			break;
		case "berkshire":
			if (pt.toLowerCase() == 'sf') {
				Mfrm.txtMaxPrice.value = '$269,125';
			} else {
				switch (u) {
					case "2":
						Mfrm.txtMaxPrice.value = '$299,455';
						break;
					default:
						Mfrm.txtMaxPrice.value = '$361,953';					
				}
			}
			Mfrm.txtMaxPrice.readOnly=true;
			break;
		case "bristol":
			if (pt.toLowerCase() == 'sf') {
				Mfrm.txtMaxPrice.value = '$416,250';
			} else {
				switch (u) {
					case "2":
						Mfrm.txtMaxPrice.value = '$472,891';
						break;
					default:
						Mfrm.txtMaxPrice.value = '$571,567';					
				}
			}
			Mfrm.txtMaxPrice.readOnly=true;
			break;
		case "franklin":
			if (pt.toLowerCase() == 'sf') {
				Mfrm.txtMaxPrice.value = '$273,500';
			} else {
				switch (u) {
					case "2":
						Mfrm.txtMaxPrice.value = '$313,348';
						break;
					default:
						Mfrm.txtMaxPrice.value = '$378,747';					
				}
			}
			Mfrm.txtMaxPrice.readOnly=true;
			break;
		case "hampden":
			if (pt.toLowerCase() == 'sf') {
				Mfrm.txtMaxPrice.value = '$273,500';
			} else {
				switch (u) {
					case "2":
						Mfrm.txtMaxPrice.value = '$313,348';
						break;
					default:
						Mfrm.txtMaxPrice.value = '$378,747';					
				}
			}
			Mfrm.txtMaxPrice.readOnly=true;
			break;
		case "hampshire":
			if (pt.toLowerCase() == 'sf') {
				Mfrm.txtMaxPrice.value = '$273,500';
			} else {
				switch (u) {
					case "2":
						Mfrm.txtMaxPrice.value = '$313,348';
						break;
					default:
						Mfrm.txtMaxPrice.value = '$378,747';					
				}
			}
			Mfrm.txtMaxPrice.readOnly=true;
			break;
		default:
			Mfrm.txtMaxPrice.readOnly=false;
	}
	*/
}

function pullPriceByTown(Mfrm, pt, u) {
		
}


function hasOptions(obj) {
	return (obj.length>0)?true:false;
}

function IsVisable(targetId) {
	if (document.layers) {
		if (document.layers[targetId].display=='none') {
			return false;
		} else {
			return true;
		}
	} else if (document.all) {
		if (document.all[targetId].style.display=='none') {
			return false;
		} else {
			return true;
		}
	} else if (document.getElementById) {
		if (document.getElementById(targetId).style.display=='none') {
			return false;
		} else {
			return true;
		}
	}
}


function toggle(targetId) {
	if (document.layers) {var current=(document.layers[targetId].display=='none')?'block':'none';document.layers[targetId].display=current;} else if (document.all) {var current=(document.all[targetId].style.display=='none')?'block':'none';document.all[targetId].style.display=current;} else if (document.getElementById) {var current=(document.getElementById(targetId).style.display=='none')?'block':'none';document.getElementById(targetId).style.display = current;}
}

function addValue(Mfrm, text,show) {var thisitem; var newoption; var isNew = true; var boxLength = Mfrm.length; for (var i = 0; i < boxLength; i++) {thisitem = Mfrm.options[i].text; if (thisitem == text) {isNew = false; i = boxLength;}} if (isNew) {var newoption = new Option(text, text, false, false); Mfrm.options[boxLength] = newoption;} else {if (isNew && show) {alert('You are limited to 5 Towns.\nPlease contact your realtor to add more towns.')}}}

function BuildCell(html, colspan) {var c;c=document.createElement("TD");c.className="tableText";c.innerHTML=html;if (colspan>1) {c.colSpan=colspan;}return c;}

function popValue(v,t,s,l) {//v1.0 (194 bytes)
	var e=document.createElement('option');
	e.value=v;
	e.text=t;
	(navigator.appName!='Microsoft Internet Explorer')?l.add(e,null):l.add(e);
	if (s.length>0) {e.setAttribute('selected', 'selected')}
}


function newImage(arg) {
	if (document.images) {
		rslt = new Image();
		rslt.src = arg;
		return rslt;
	}
}

function changeImages() {
	if (document.images && (preloadFlag == true)) {
		for (var i=0; i<changeImages.arguments.length; i+=2) {
			document[changeImages.arguments[i]].src = changeImages.arguments[i+1];
		}
	}
}
/*
    json.js
    2006-04-28

    This file adds these methods to JavaScript:

        object.toJSONString()

            This method produces a JSON text from an object. The
            object must not contain any cyclical references.

        array.toJSONString()

            This method produces a JSON text from an array. The
            array must not contain any cyclical references.

        string.parseJSON()

            This method parses a JSON text to produce an object or
            array. It will return false if there is an error.
*/
(function () {var m = {'\b': '\\b','\t': '\\t','\n': '\\n','\f': '\\f','\r': '\\r','"' : '\\"','\\': '\\\\'},s = {array: function (x) {var a = ['['], b, f, i, l = x.length, v;for (i = 0; i < l; i += 1) {v = x[i];f = s[typeof v];if (f) {v = f(v);if (typeof v == 'string') {if (b) {a[a.length] = ',';}a[a.length] = v;b = true;}}}a[a.length] = ']';return a.join('');},'boolean': function (x) {return String(x);},'null': function (x) {return "null";},number: function (x) {return isFinite(x) ? String(x) : 'null';},object: function (x) {if (x) {if (x instanceof Array) {return s.array(x);}var a = ['{'], b, f, i, v;for (i in x) {v = x[i];f = s[typeof v];if (f) {v = f(v);if (typeof v == 'string') {if (b) {a[a.length] = ',';}a.push(s.string(i), ':', v);b = true;}}}a[a.length] = '}';return a.join('');}return 'null';},string: function (x) {if (/["\\\x00-\x1f]/.test(x)) {x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) {var c = m[b];if (c) {return c;}c = b.charCodeAt();return '\\u00' +Math.floor(c / 16).toString(16) +(c % 16).toString(16);});}return '"' + x + '"';}};Object.prototype.toJSONString = function () {return s.object(this);};Array.prototype.toJSONString = function () {return s.array(this);};})();String.prototype.parseJSON = function () {try {return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(this.replace(/"(\\.|[^"\\])*"/g, ''))) &&eval('(' + this + ')');} catch (e) {return false;}};
