var app = {};
app.url_info = "/json/info";
app.url_latest = "/json/latest";
app.url_favor = "/json/favor";
app.url_qkeyword = "/json/qkeyword";
app.url_city = "/json/city";
app.url_delete = "/json/delete";
app.listoption = "listoptionbar";
function vs(e,val) { e.value = val;}
function d0(e) { e.style.display = "none";}
function d1(e) { e.style.display = ""; }
function u(v) {	return typeof v == "undefined";}
String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}
function winHeight(){ return self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0 }
function create(o,t){
	if (o == 'text') return document.createTextNode(t||'')
	else {
		var e = document.createElement(o);
		if (t) {
			if (typeof t == 'string') e.innerHTML = t;
			else niceExtend(e, t);
		}
		return e;
}}
function niceExtend(dest, src){
	if(!src) return dest
	if(src.html) { dest.innerHTML = src.html; delete src.html }
	if(src.css) { dest.className = src.css; delete src.css }
	if(src.attr) {
		var s = src.attr
		for(var k in s) dest.setAttribute(k, s[k])
		delete src.attr
	}
	if(src.style) {
		var d = dest.style, s = src.style
		for(var k in s) d[k] = s[k]
		delete src.style
	}
	for(var k in src) dest[k] = src[k]
	return dest
}
function SetAutoLocateViewport(lat, lng, lvl, bl, msg)
{
    if(app)
    {
    	app.LOC_LAT = lat;
    	app.LOC_LNG = lng;
    }        
}

function getLocationInfo(cid, lat, lng, district, callback)
{	
	var u = app.url+app.url_city+"?key="+app.key+"&cid="+cid+"&district="+district+"&lat="+lat+"&lng="+lng;
	new Ajax.Request(u, {method:"GET", onSuccess:callback});
}
function setLocationInfo(xmlHttp)
{
	var result = xmlHttp.responseText.evalJSON(true);
	if(result.status)
	{
		var c = $("location").getElementsByClassName("name");
		if(c)
		{
			c[0].appendChild(create("text", result.city.name));
			if(app)
			{
				app.cid = result.city.ID;
			}
		}
		// set city info into cookie
		setCookie("CID", result.city.ID, 30);
	}
}
function resizeMap(){
	var a=0;
	var d=0;
	for(var b=$("map");b!==null;b=b.offsetParent)
	{
		a+=b.offsetTop;
	}
	var c=winHeight();
	var d=c-a;
	var h=c-a-$("sidetool").offsetHeight-100;
	app.h_rl = h;
	if(d>=0){
		$("map").style.height = d+"px";
		$("side").style.height = d+"px";
		//$("splitter").style.height = d+"px";
	}
}
function resizeMListHeight(m)
{
	var h = app.h_rl;
	if(m.offsetHeight> h)
	{
		m.style.height = h+"px";
	}
}
function loader()
{
	var c = create("div", {css:"loading"});
	var i = create("img", {src:app.url+"/public/images/indicator.gif"});
	c.appendChild(i);
	return c;
}
function srtypechanged(e){ app.salerent = $("saletypefield").value; app.activeFunc("listwrapper", 1);} 
function orderchanged(e){ app.orderby = $("orderfield").value; app.activeFunc("listwrapper", 1);}
function removeChilds(e){ while(e.firstChild){ e.removeChild(e.firstChild);}}
function getLMarkers(target, page)
{
	app.resizeMap = true;
	app.activeFunc = getLMarkers;
	app.listtitle = "所有房源信息";
	removeChilds($(target));	
	$(target).appendChild(loader());
	var q = {};
	q["key"] = app.key;
	q["target"] = target;
	q["page"] = page;
	q["cid"] = app.cid;
	getSaleRentOrder(q);
	
	var u = app.url+app.url_latest+"?"+Hash.toQueryString(q);
	new Ajax.Request(u, {method:"get", onSuccess:addContentToULList});
}
function getUserMarkers(target, page)
{
	app.activeJsonUrl = app.url+"/json/mywhere";
	app.resizeMap = true;
	app.activeFunc = getUserMarkers;
	app.listtitle = app.cuname+"的地盘";
	removeChilds($(target));
	
	$(target).appendChild(loader());
	var q = {};
	q["key"] = app.key;
	q["target"] = target;
	q["page"] = page;
	q["uid"] = app.cuid;
	getSaleRentOrder(q);
	
	var u = app.activeJsonUrl+"?"+Hash.toQueryString(q);
	new Ajax.Request(u, {method:"get", onSuccess:addContentToULList});	
}
function getPropertiesInRect(target, page)
{
	app.resizeMap = false;
	app.activeFunc = getPropertiesInRect;
	app.listtitle = "当前视图范围内房源信息";
	removeChilds($(target));	
	$(target).appendChild(loader());
	var q = {};
	q["key"] = app.key;
	q["target"] = target;
	q["page"] = page;
	getSaleRentOrder(q);
	if(app.map)
	{
		var b = app.map.getBounds();
		var en = b.getNorthEast();
		var ws = b.getSouthWest();
		q["rt"] = en.toUrlValue();
		q["lb"] = ws.toUrlValue();
		var u = app.activeJsonUrl+"?"+Hash.toQueryString(q);
		new Ajax.Request(u, {method:"get", onSuccess:addContentToULList});	
	}
}

function getMyFavorites(target, page)
{
	app.resizeMap = true;
	app.activeFunc = getMyFavorites;
	app.listtitle = "我的收藏夹";
	removeChilds($(target));
	
	$(target).appendChild(loader());
	var q = {};
	q["key"] = app.key;
	q["target"] = target;
	q["page"] = page;
	getSaleRentOrder(q);
	
	var u = app.activeJsonUrl+"?"+Hash.toQueryString(q);
	new Ajax.Request(u, {method:"get", onSuccess:addContentToULList});	
}

function getMyProfileSetting(target)
{
	app.activeFunc = getMyProfileSetting;
	app.listtitle = "个人设置";
	removeChilds($(target));
	$(target).appendChild(loader());
	var q = {};
	q["key"] = app.key;
	q["act"] = "setting";
	q["target"] = target;
	
	var u = app.activeJsonUrl+"?"+Hash.toQueryString(q);
	new Ajax.Request(u, {method:"get", onSuccess:showProfileSetting});
}

function getMyWhere(target, page)
{
	app.resizeMap = true;
	app.activeFunc = getMyWhere;
	app.listtitle = "我的地盘";
	removeChilds($(target));
	
	$(target).appendChild(loader());
	var q = {};
	q["key"] = app.key;
	q["target"] = target;
	q["page"] = page;
	getSaleRentOrder(q);
	
	var u = app.activeJsonUrl+"?"+Hash.toQueryString(q);
	new Ajax.Request(u, {method:"get", onSuccess:addContentToULList});	
}

function getPropertiesByKeyword(target, page)
{
	app.resizeMap = true;
	app.activeFunc = getPropertiesByKeyword;
	app.listtitle = "关键词:"+app.search.keyword+" 查询结果";
	removeChilds($(target));
	
	$(target).appendChild(loader());
	var q = {};
	q["key"] = app.key;
	q["target"] = target;
	q["page"] = page;
	getSaleRentOrder(q);
	if(app.search)
	{
		q["keyword"] = app.search.keyword;
		q["cid"] = app.search.cid;
		var u = app.url+app.url_qkeyword+"?"+Hash.toQueryString(q);
		new Ajax.Request(u, {method:"get", onSuccess:addContentToULList});	
	}
}
function addContentToULList(xmlHttp)
{	
	var result = xmlHttp.responseText.evalJSON(true);
	if(!result.status || result.total == 0)
	{
		removeChilds($(result.target));
		$(result.target).appendChild(getListTitle());
		$(result.target).appendChild(noresult(app.activeFunc, result));
		return;
	}
	
	var navt = create("div", {attr:{id:"resultnavt"}});		
	var navb = create("div", {attr:{id:"resultnavb"}});
	var u = create("ul", {attr:{id:"results"}});
	
	resultnav(navt, result.tpage, result.cpage);
	resultnav(navb, result.tpage, result.cpage);
	
	var ms = [];
	
	var b = new GLatLngBounds();
		
	for(var index = 0; index < result.list.length; index++)
	{
		var li = addMarkerToList(u, result.list[index]);
		ms.push(getGMarker(result.list[index],b, li));
	}
	
	if(app.map)
	{
		app.map.clearOverlays();
		if(app.resizeMap)
		{
			var l = app.map.getBoundsZoomLevel(b);
			app.map.setCenter(b.getCenter(),(l<19?l:18));
		}
		for(var i = 0; i < ms.length; i++)
		{
			app.map.addOverlay(ms[i]);
		}
	}
	if($(result.target).getElementsByClassName("loading")[0]) $(result.target).getElementsByClassName("loading")[0].remove();
	// add current tool scope title
	$(result.target).appendChild(getListTitle());
	if(!$(app.listoption))
	{ 	
		$(result.target).appendChild(listOptionBar(result.sale, result.rent, result.order, result.asc));
	}
	$(result.target).appendChild(navt);	
	$(result.target).appendChild(u);
	$(result.target).appendChild(navb);
	resizeMListHeight(u);	
}

function addMarkerToList(u, m)
{
	var l = create("li", {css:"property", attr:{id:"property_"+m.ID}});
	l.data = m;
	if(typeof m.favored != "undefined")
	{
		if(m.author.ID != app.uid)
		{
			var s = "unfavor";
			var ft = "Click to unfavorite this marker";
			if(m.favored == 0)
			{
				s = "favor";
				ft = "Click to favorite this marker";
			}
			var f = create("span", {css:s, attr:{title:ft}});
			Element.observe(f, "click", favorclick);
			l.appendChild(f);
		}
	}
	var h = create("h3", {css:"entry-title"});
	h.appendChild(create("a", {html:m.title, attr:{href:"#"}, onclick:placeClick}));
	l.appendChild(h);
	if(m.author.ID == app.uid)
	{
		// add delete/edit button
		var cmd = create("div", {css:"entry-cmd"});
		var edit = create("a", {css:"edit", html:"编辑", attr:{href:"#", title:"修改该房源信息"}, onclick: editplace});
		var del = create("a", {css:"delete", html:"删除", attr:{href:"#", title:"删除该房源信息"}, onclick:deleteplaceConfirm});
		cmd.appendChild(edit);
		cmd.appendChild(create("text","/"));
		cmd.appendChild(del);
		l.appendChild(cmd);
	}
	var r = create("div", {css:"entry-type"});
	if(m.issale)
	{
	 	var st = create("span", {css:"sale", html:"出售"});	 	
	 	r.appendChild(st);
	 	if(m.saleprice)	r.appendChild(create("span", {css:"saleprice", html:"("+m.saleprice+"万)"}));
	}
	if(m.isrent)
	{
	 	var rt = create("span", {css:"rent", html:"出租"});	 	
	 	r.appendChild(rt);
	 	if(m.rentprice)	r.appendChild(create("span", {css:"rentprice", html:"("+m.rentprice+"元/月)"}));
	}
	l.appendChild(r);
	var d = create("div", {css:"entry-detail"});
	var p = create("div",{css:"entry-pdesc"});
	p.appendChild(create("text", "房型:"+m.ptype+","));
	p.appendChild(create("text", m.decorationlevel));
	if(m.position) p.appendChild(create("text", ",楼层:"+m.position));
	d.appendChild(p);
	
	var a = create("span", {css:"entry-author"});
	a.appendChild(create("a", {html:m.author.name,attr:{href:app.url+"/user/"+m.author.ID}}));
	d.appendChild(a);
	d.appendChild(create("text", "添加于"));
	d.appendChild(create("span", {css:"entry-updated", html:m.udate.substr(0,10), attr:{title:m.udate}}));
	//d.appendChild(create("text", " 在 "));
	//d.appendChild(create("p", {css:"entry-summary", html:m.desc}));
	l.appendChild(d);
	u.appendChild(l);
	return l;
}
function getGMarker(m, b, li)
{
	if(m.geom)
	{
		switch(m.geom.type)
		{
			case "1":
				var pt = new GLatLng(m.geom.data[0], m.geom.data[1]);
				var gi = G_DEFAULT_ICON;
				if(!li.data.issale || !li.data.isrent)
				{
					if(li.data.issale){	gi = saleIcon(); }
					else{ gi = rentIcon(); }
				}
				b.extend(pt);
				var gm = new GMarker(pt, {icon:gi, draggable:true});
				gm.disableDragging();
				gm.tag = m.ID;
				gm.title = m.title;
				gm.li = li;
				li.m = gm;
				gm.init = false;
				GEvent.addListener(gm, "click", function(){
			    	if(!gm.init)
			    	{    	
			    		app.activeMarker = gm;
				    	gm.openInfoWindowHtml(loader());	    	
				    	getFeatureInfo(gm);
			    	}
			    	else
			    	{
			    		openMarkerInfo(gm, gm.info);
			    		Element.addClassName(li, "highlight");
			    	}	    	
		    	});
			    GEvent.addListener(gm, "infowindowclose", function(){  
			    	if(gm.init)
			    	{
				    	Element.removeClassName(li, "highlight")
			    	}
			    });
				return gm;	
			break;
		}
	}
	return null;
}
function getFeatureInfo(m)
{
	var u = app.url+app.url_info+"?key="+app.key+"&fid="+m.tag;	
	new Ajax.Request(u, {method:"GET", onSuccess:addFeatureInfo});
}
function addFeatureInfo(dom)
{
	if(app.activeMarker)
	{	
		var m = app.activeMarker;	
		var c = dom.responseText.evalJSON(true);
		if(c.status)
		{			
			if(c.tab)
			{
				openMarkerInfo(m, c.tab);
				m.info = c.tab;
				m.init = true;
				Element.addClassName(m.li, "highlight");
			}				
		}
		else
		{
			m.openInfoWindowHtml(c.message);
		}		
	}
}
function showProfileSetting(xmlHttp)
{
	var result = xmlHttp.responseText.evalJSON(true);
	removeChilds($(result.target));
	$(result.target).appendChild(getListTitle());
	if(!result.status)
	{		
		$(result.target).appendChild(noresult(app.activeFunc, result));
		return;
	}
	else
	{
		//create profile setting form
		var infoBody = $("profileholder").getElementsByTagName("div")[0].cloneNode(true);
		var fn = infoBody.getElementsByTagName("form")[0];
		var inputs = fn.getElementsByTagName("input");
		var desc = fn.getElementsByTagName("textarea")[0];
		var sels = fn.getElementsByTagName("select");
		inputs["pnamefield"].value = result.data.name;
		if(result.data.profile)
		{
			if(result.data.profile.contact)inputs["pcontactfield"].value = result.data.profile.contact;
			if(result.data.profile.city) changeSelectByValue(sels["pcityidfield"], result.data.profile.city);
			if(result.data.profile.type)changeSelectByValue(sels["pusertypefield"], result.data.profile.type);
			if(result.data.profile.desc)desc.value = result.data.profile.desc;
		}
		$(result.target).appendChild(infoBody);
	}
}
function listOptionBar(sale, rent, order, asc)
{
	var rtval = 1;
	if(sale == 0 || rent == 0){if(sale) rtval = 2; else rtval = 3; }
	if(asc) orderval = "A";
	else orderval = "D";
	if(order != null && order.substr(0,1).toUpperCase() == "P") orderval += "PRICE";
	else orderval += "FID";
	
	var loptionbar = create("div", {attr:{id:app.listoption}});
	var stc = create("span", "内容");
	var stsel = create("select", {size:1, attr:{id:"saletypefield"}, onchange:srtypechanged});
	var stopt1 = create("option", {value:"1", selected:(rtval == 1?true:false), defaultChecked: true, html:"全部"});
	var stopt2 = create("option", {value:"2", selected:(rtval == 2?true:false), html:"出售"});
	var stopt3 = create("option", {value:"3", selected:(rtval == 3?true:false), html:"出租"});
	
	stsel.appendChild(stopt1);
	stsel.appendChild(stopt2);
	stsel.appendChild(stopt3);
	stc.appendChild(stsel);
	loptionbar.appendChild(stc);
	
	var listc = create("span", "显示");
	var sel = create("select", {size:1, attr:{id:"orderfield"}, onchange:orderchanged});
	var opt1 = create("option", {value:"DFID", selected:(orderval == "DFID"?true:false), defaultChecked: true, html:"按时间倒序"});
	var opt2 = create("option", {value:"AFID", selected:(orderval == "AFID"?true:false),  html:"按时间顺序"});
	var opt3 = create("option", {value:"DPRICE",selected:(orderval == "DPRICE"?true:false), html:"按价格 从高到低"});
	var opt4 = create("option", {value:"APRICE",selected:(orderval == "APRICE"?true:false), html:"按价格 从低到高"});
	sel.appendChild(opt1);
	sel.appendChild(opt2);
	sel.appendChild(opt3);
	sel.appendChild(opt4);
	listc.appendChild(sel);
	loptionbar.appendChild(listc);
	return loptionbar;
}

function getGeomData(d,t)
{
	switch(t)
	{
		case "0":
			var c = d.substr(6, d.length-7).split(" ");
			return c;		
		break;
		default:
			return null;
	}
}
function resultnav(e, tpage, cpage)
{
	var d = 6;
	var u = create("ul", {css:"pagesList"});
	var pl = create("li", {css:"rleft"});	
	if(cpage > 1)
	{		
		pl.appendChild(create("a", {attr:{href:"javascript:prepage();"}, html:"Prev"}));		
	}
	else
	{
		pl.appendChild(create("text","Prev"));
	}
	u.appendChild(pl);
	if(tpage <= d)
	{
		for(var index = 1;index <= tpage; index++)
		{
			var c = (index == cpage ? "cpage":"");
			var l = create("li",{css:c});
			if(index == cpage){l.appendChild(create("text", index));}
			else { l.appendChild(create("a", {attr:{href:"javascript:gopage("+index+")"}, html:index})); }
			u.appendChild(l);
		}
	}
	else
	{
		if(cpage < d-1)
		{
			for(var i = 1; i <= d-1; i++)
			{
				var bc = (i == cpage ? "cpage":"");
				var bl = create("li",{css:bc});
				if(i == cpage){ bl.appendChild(create("text", i)); }
				else { bl.appendChild(create("a", {attr:{href:"javascript:gopage("+i+")"}, html:i})); }
				u.appendChild(bl);
			}			
			u.appendChild(create("li", {html:"..."}));
			var ll = create("li");
			ll.appendChild(create("a", {attr:{href:"javascript:gopage("+tpage+")"}, html:tpage}));
			u.appendChild(ll);
		}
		else if(tpage-cpage <= d-2)
		{
			var fl = create("li");
			fl.appendChild(create("a", {attr:{href:"javascript:gopage("+1+")"}, html:"1"}));
			u.appendChild(fl);
			u.appendChild(create("li", {html:"..."}));	
			for(var j= tpage-d+2; j <= tpage; j++)
			{
				var ac = (j == cpage ? "cpage":"");
				var al = create("li",{css:ac});
				if(j == cpage) { al.appendChild(create("text", j)); }
				else { al.appendChild(create("a", {attr:{href:"javascript:gopage("+j+")"}, html:j})); }
				u.appendChild(al);
			}
		}
		else
		{
			var fl = create("li");
			fl.appendChild(create("a", {attr:{href:"javascript:gopage("+1+")"}, html:"1"}));
			u.appendChild(fl);
			u.appendChild(create("li", {html:"..."}));			
			for(var m = cpage - d/2+1; m < cpage + d/2; m++)
			{
				var mc = (m == cpage ? "cpage":"");
				var ml = create("li",{css:mc});
				if(m == cpage){ ml.appendChild(create("text", m)); }
				else{ ml.appendChild(create("a", {attr:{href:"javascript:gopage("+m+")"}, html:m})); }
				u.appendChild(ml);
			}
			u.appendChild(create("li", {html:"..."}));
			var el = create("li");
			el.appendChild(create("a", {attr:{href:"javascript:gopage("+tpage+")"}, html:tpage}));
			u.appendChild(el);
		}
	}
	var nl = create("li", {css:"rright"});
	if(cpage < tpage)
	{		
		nl.appendChild(create("a", {attr:{href:"javascript:nextpage();"}, html:"Next"}));		
	}
	else
	{
		nl.appendChild(create("text","Next"));
	}
	u.appendChild(nl);
	return e.appendChild(u);
}
function openMarkerInfo(m, tab)
{
	if(tab.length < 2)
	{
		m.openInfoWindowHtml(tab[0].content);
	}
	else
	{
		var tabs = [];
		for(var i = 0; i<tab.length; i++)
		{
			tabs.push(new GInfoWindowTab(tab[i].title, tab[i].content));
		}
		m.openInfoWindowTabsHtml(tabs);
	}
}
function placeClick(e)
{
	e = e||window.event;
	var t = e.target||e.srcElement;
	var l = t.parentNode.parentNode;
	if(l.m)
	{
		if(l.m.init){ openMarkerInfo(l.m, l.m.info); }
		else
		{
			app.activeMarker = l.m;
		    l.m.openInfoWindowHtml(loader());	    	
		    getFeatureInfo(l.m);
		}
		Element.addClassName(l, "highlight");
	}
}
function editplace(e)
{
	e = e||window.event;
	var t = e.target||e.srcElement;
	var cmd = t.parentNode;
	var l = cmd.parentNode;
	app.editActive = l;
	if(l.data && l.m)
	{
		l.m.submitted = false;
		getLocationInfo(app.cid, l.data.geom.data[0], l.data.geom.data[1], 1, addLocationInfo);
		var ef = getEditForm(l.data);		
		app.activeMarker = l.m;
		l.m.info = ef;
		l.m.enableDragging();
		l.m.openInfoWindowHtml(ef);
		GEvent.addListener(l.m, 'infowindowclose', infowinClosedAdd);
		GEvent.addListener(l.m, 'dragstart', infowinDragStart);
		GEvent.addListener(l.m, 'dragend', infowinDragEnd);
	}
}

function getEditForm(data)
{
	var infoBody = $("newmarker").getElementsByTagName("div")[0].cloneNode(true);
	var fn = infoBody.getElementsByTagName("form")[0];	
	var url = app.url+ fn.getAttribute("action");
	var inputs = fn.getElementsByTagName('input');
	var txNodes = fn.getElementsByTagName('textarea');
	var sels = fn.getElementsByTagName("select");
	var fcontact = txNodes[0];
	var fdesc = txNodes[1];

	inputs["ftitlefield"].value = data.title;//title 
	var srIndex = 0
	if(!data.issale || !data.isrent)
	{
		if(data.issale && data.issale == 1) 
		{
			srIndex = 1;
			inputs["rentpricefield"].disabled = true;
			
		}
		else
		{
			srIndex = 2;
			inputs["salepricefield"].disabled = true;
		}
	}
	sels["salerentfield"].selectedIndex = srIndex;
	if(data.issale && data.isrent) $("salerentfield").value = 1;
	if(data.saleprice) inputs["salepricefield"].value = data.saleprice; //saleprice
	if(data.rentprice) inputs["rentpricefield"].value = data.rentprice; //rentprice
	changeSelectByText(sels["ptypefield"], data.ptype);	//ptype
	changeSelectByText(sels["decorationfield"], data.decorationlevel);	//dlevel
	if(data.ptypecomment) inputs["ptypecommentfield"].value = data.ptypecomment; //ptypecomment
	if(data.area) inputs["areafield"].value = data.area; //area
	if(data.location)inputs["locationfield"].value = data.location; //location
	changeSelectByText(sels["orientationfield"], data.ptype);	//orientation
	if(data.position) inputs["positionfield"].value = data.position;	//position
	if(data.contact) fcontact.value = data.contact;	//contact
	if(data.desc) fdesc.value = data.desc;	//desc
	
	// change button label
	var btns = fn.getElementsByTagName("button");
	btns[0].text = "更新";
	var coord = create("input", {attr:{type:"hidden", id:"coordfield"}, value: data.geom.data[0]+","+data.geom.data[1]});
	var fid = create("input", {attr:{type:"hidden", id:"fid"}, value:data.ID});
	var action = create("input", {attr:{type:"hidden", id:"act"}, value:"update"});
	fn.appendChild(coord);
	fn.appendChild(fid);
	fn.appendChild(action);
	return infoBody;
}

function deleteplaceConfirm(e)
{
	e = e||window.event;
	var t = e.target||e.srcElement;
	var cmd = t.parentNode;
	var list = cmd.parentNode;
	
	Element.hide(cmd);
	var s = create('div', {css: 'entry-cmd-confirm'});
	s.appendChild( create('span', {html: '&nbsp;确认删除这条房源信息?&nbsp;', css: 'important'}));
	s.appendChild( create('a', {html: '否', onclick:deleteNo, href:'#'}));
	s.appendChild( create('text', ' / ') )
	s.appendChild( create('a', {html: '是', onclick:deleteYes, href:'#'}));
	list.insertBefore(s, cmd);
	return false;
}
function deleteYes(e)
{
	e = e||window.event;
	var t = e.target||e.srcElement;
	var l = t.parentNode.parentNode;
	var id = l.id.split('_')[1];
	var q = {};
	q["key"] = app.key;
	q["target"] = l.id;
	q["fid"] = id;
	var u = app.url+app.url_delete+"?"+Hash.toQueryString(q);
	new Ajax.Request(u, {method:"get"});
	if(l.m) app.map.removeOverlay(l.m);
	Element.remove(l);
	return false;
}
function deleteNo(e)
{
	e = e||window.event;
	var t = e.target||e.srcElement;
	var confirm = t.parentNode; 
	commands = Element.next(confirm);
	commands.style.display = 'inline';
	Element.remove(confirm);
}
function prepage()
{
	var c = $("resultnavt").getElementsByClassName("cpage")[0].firstChild;
	gopage(parseInt(c.nodeValue) - 1);
}
function nextpage()
{
	var c = $("resultnavt").getElementsByClassName("cpage")[0].firstChild;
	gopage(parseInt(c.nodeValue) + 1);
}
function gopage(index){	app.activeFunc("listwrapper", index); }

function noresult(scope, result)
{
	var div = create("div", {css:"noresult"});
	var content = null;
	switch(scope)
	{
		case getLMarkers:
			content = create("text", "当前还没有任何房产信息被添加，如果你有可以提供的信息，请点击“添加”按钮以提交信息。如果你是寻求房源信息，可以通过“信息订阅”功能，自动获得指定地区或范围的信息！");
		break;
		case getPropertiesInRect:
			content = create("text", "在当前视图范围没有查询到任何房源信息。你可以变换当前视图或者通过“信息订阅”功能，自动获得指定地区或者区域的房源信息！");
		break;			
		case getPropertiesByKeyword:
			var msg = "关键词："+app.search.keyword+"<br/> 城市："+result.city.name;
			content = create("span", {html:"对不起，我们没有找到任何房源符合您所输入的条件：<br/>"+msg+"<br/>您可以修改条件重新查询。"});
		break;
		case getMyFavorites:
			if(!result.status && result.UID == -1)
			{
				var msg = "对不起，此项功能需要您<a href='"+app.login+"' style='color:green'>登录</a>后才能使用。";
				content = create("span", {html:msg});
			}
			else
			{
				content = create("span", {html:"您还没有收藏任何标注！<br/>可以通过点击列表中任何标注前的<br/><span class='favor'></span>图标，从而将它添加到您的收藏夹。"});
			}
			break;
		case getMyProfileSetting:
			if(!result.status && result.UID == -1)
			{
				var msg = "对不起，此项功能需要您<a href='"+app.login+"' style='color:green'>登录</a>后才能使用。";
				content = create("span", {html:msg});
			}
			break;
		case getMyWhere:
			if(!result.status && result.UID == -1)
			{
				var msg = "对不起，此项功能需要您<a href='"+app.login+"' style='color:green'>登录</a>后才能使用。";
				content = create("span", {html:msg});
			}
			else
			{
				content = create("span", {html:"您还没有添加任何房产信息！<br/>如果你有可以提供的房产信息，可以通过点击地图左上角的＂添加＂按钮以提交信息。"});
			}
			break;
	}
	div.appendChild(content);
	return div;
}

function showhideside()
{
	var c = $("splitter").className;
	if(c == "hide")
	{
		$("splitter").className = "show";
		$("splitter").innerHTML = "&raquo;"
		$("side").style.display = "none";
		$("map").className = "widemode";
		if(app.map){app.map.checkResize();}
	}
	else
	{
		$("splitter").className = "hide";
		$("splitter").innerHTML = "&laquo;";
		$("side").style.display = "";
		$("map").className = "narrowmode";
		if(app.map){ app.map.checkResize();	}
	}
}
function favorclick(e)
{
	e = e||window.event;
	var n = e.target||e.srcElement;
	var f = n.parentNode.getAttribute("id");
	var fid = f.split("_")[1];
	switch(n.className)
	{
		case "favor":
			updateFavor(true, fid);
			n.className = "unfavor";
			break;
		case "unfavor":
			updateFavor(false, fid);
			n.className = "favor";
			break;
	}
}
function infofavorclick(e, fid)
{
	e = e||window.event;
	var lf = false;
	var l = $("property_"+fid);
	if(l)
	{
		lf = Element.getElementsByClassName(l, e.className);
	}
	switch(e.className)
	{
		case "favor":
			updateFavor(true, fid);
			e.className = "unfavor";
			if(lf) lf.className = "unfavor";
			break;
		case "unfavor":
			updateFavor(false, fid);
			e.className = "favor";
			if(lf) lf.className = "favor";
			break;
	}	
}
function updateFavor(favored, fid)
{	
	var q = {};
	q["key"] = app.key;
	q["favor"] = favored?1:0;
	q["fid"] = fid;
	var u = app.url+app.url_favor+"?"+Hash.toQueryString(q);
	new Ajax.Request(u, {method:"get"});	
}

function querylatest(e)
{
	app.activeJsonUrl = e.href;
	getLMarkers("listwrapper", 1);
}

function querycview(e)
{
	app.activeJsonUrl = e.href;
	getPropertiesInRect("listwrapper", 1);
}

function queryfavor(e)
{
	app.activeJsonUrl = e.href;
	getMyFavorites("listwrapper", 1);
}

function querymywhere(e)
{
	app.activeJsonUrl = e.href;
	getMyWhere("listwrapper", 1);
}

function profilesetting(e)
{
	app.activeJsonUrl = e.href;
	getMyProfileSetting("listwrapper");
}
function getListTitle()
{
	return create("div", {css:"listtitle", html:app.listtitle});
}
function dosearch()
{
	var keyword = $("keywordfield").value.trim();
	var cid = $("targetcityfield").value;
	if(app.search) delete app.search;
	app.search = {};
	app.search["keyword"] = keyword;
	app.search["cid"] = cid;
	getPropertiesByKeyword("listwrapper", 1);
}
function validateFormInput(fn)
{
	var result = true;
	var inputs = fn.getElementsByTagName('input');
	var title = inputs["ftitlefield"].value.trim();
	if(title == "") 
	{
		Element.addClassName(inputs["ftitlefield"],"warn");
		result = false;
	}
	else
	{
		if(Element.hasClassName(inputs["ftitlefield"],"warn")) Element.removeClassName(inputs["ftitlefield"],"warn");
	}
	if(!inputs["rentpricefield"].disabled)
	{
		var rp = parseInt(inputs["rentpricefield"].value.trim());
		if(isNaN(rp)) 
		{
			Element.addClassName(inputs["rentpricefield"],"warn");
			result = false;
		}
		else
		{
			if(Element.hasClassName(inputs["rentpricefield"],"warn")) Element.removeClassName(inputs["rentpricefield"],"warn");
		}
	}
	if(!inputs["salepricefield"].disabled)
	{
		var sp = parseFloat(inputs["salepricefield"].value.trim());
		if(isNaN(sp))
		{
			Element.addClassName(inputs["salepricefield"],"warn");
			result = false;
		}
		else
		{
			if(Element.hasClassName(inputs["salepricefield"],"warn")) Element.removeClassName(inputs["salepricefield"],"warn");
		}
	}
	if(inputs["areafield"].value.trim() !="")
	{
		var area = parseFloat(inputs["areafield"].value.trim());
		if(isNaN(area)) 
		{
			Element.addClassName(inputs["areafield"], "warn");
			result = false;
		}
		else
		{
			if(Element.hasClassName(inputs["areafield"],"warn")) Element.removeClassName(inputs["areafield"],"warn");
		}
	}
	return result;
}
function getSaleRentOrder(q)
{
	if(app.salerent) q["salerent"] = app.salerent;
	else q["salerent"] = 1;
	if(app.orderby) q["order"] = app.orderby;
	else q["order"] = "DFID";
}
function changeSelectByValue(select, item)
{
	for(var i = 0; i < select.options.length; i++)
	{
		if(select.options[i].value == item)
		{
			select.selectedIndex = i;
			break;
		}
	}
}
function changeSelectByText(select, item)
{
	for(var i = 0; i < select.options.length; i++)
	{
		if(select.options[i].text == item)
		{
			select.selectedIndex = i;
			break;
		}
	}
}
function infowinSubmitted()
{
	if(app.activeMarker)
	{
		app.activeMarker.submitted = true;	//the marker data has been submitted
		var fn = app.activeMarker.info.getElementsByTagName('form')[0];	//form node
		if(validateFormInput(fn))
		{
			var url = app.url+ fn.getAttribute("action");
			var inputs = fn.getElementsByTagName('input');
			var txNodes = fn.getElementsByTagName('textarea');
			var sels = fn.getElementsByTagName("select");
			var fcontact = txNodes[0];
			var fdesc = txNodes[1];
			var fid = 0;
			var cid = app.cid;
			var did = -1;
			if(inputs["fid"]) fid = inputs["fid"].value;
			if(inputs["cityidfield"]) cid = inputs["cityidfield"].value;
			if(inputs["districtidfield"]) did = inputs["districtidfield"].value;
			var vars = {
				key: app.key,
				act: inputs["act"].value,
				title: inputs['ftitlefield'].value.trim(),
				desc: fdesc.value.trim(),
				ptype:sels["ptypefield"].value,
				ptypecomment: inputs['ptypecommentfield'].value.trim(),
				area: inputs['areafield'].value.trim(),
				dtype: sels["decorationfield"].value,
				salerent: sels["salerentfield"].value, 
				location: inputs["locationfield"].value.trim(),
				contact: fcontact.value.trim(),
				pricerent: inputs['rentpricefield'].value.trim(),
				pricesale: inputs['salepricefield'].value.trim(),
				orientation: sels["orientationfield"].value,
				position: inputs['positionfield'].value.trim(),
				cid: cid,
				did:did,
				isavaiable:1,
				coords : inputs['coordfield'].value,
				fid: fid
			};			
			var parameter = Hash.toQueryString(vars);
			new Ajax.Request(url, {method:"post", postBody:parameter, onSuccess:submitCompleted});
			var c = fn.parentNode;
			d0(fn);
			c.appendChild(loader());
		}
		else
		{
			if(!$("invalidWarn"))
			{
				var warnMsg = create("div", {html:"*请注意红色外框栏输入信息的正确性", css:"important", attr:{id:"invalidWarn"}});
				fn.appendChild(warnMsg);
			}
			return false;
		}
	}	
}

function infowinCancelled()
{
	if(app.activeMarker)
	{
		var i = app.activeMarker.info;
		var fn = i.getElementsByTagName("form")[0];
		var inputs = fn.getElementsByTagName('input');
		if(inputs['act'].value == "add" && app.activeMarker.removeable)
		{
			app.map.removeOverlay(app.activeMarker);
		}
		else if(inputs['act'].value == "update")
		{
			app.activeMarker.init = false;
			app.activeMarker.closeInfoWindow();
		}
		GEvent.clearListeners(app.activeMarker, 'infowindowclose');
	}	
}

function infowinDragStart()
{
	if(app.activeMarker)
	{
		app.activeMarker.removeable = false;
		app.activeMarker.closeInfoWindow();
	}
}
function infowinDragEnd()
{
	if(app.activeMarker)
	{
		app.activeMarker.removeable = true;
		var p = app.activeMarker.getPoint();
		var i = app.activeMarker.info;
		var coord = i.getElementsByTagName('input')['coordfield'];
		coord.value = p.lat()+","+p.lng();
		app.activeMarker.openInfoWindow(i);
	}
}
function infowinClosedAdd()
{
	infowinCancelled();
}
function infowinClosedNormal()
{
	
}
function infowinClick()
{
	
}

function profileSubmitted(e)
{
	var fn = e.parentNode.parentNode.parentNode;	//form node
	var target = fn.parentNode.parentNode;
	var url = app.url+ fn.getAttribute("action");
	var inputs = fn.getElementsByTagName("input");
	var sels = fn.getElementsByTagName("select");
	var desc = fn.getElementsByTagName("textarea")[0];
	
	var vars = {
		key:app.key,
		act:"do",
		target: target.id,
		name: inputs["pnamefield"].value.trim(),
		cityid: sels["pcityidfield"].value,
		contact:inputs["pcontactfield"].value.trim(),
		desc:desc.value,
		usertypeid:sels["pusertypefield"].value
	};
	
	var parameter = Hash.toQueryString(vars);
	new Ajax.Request(url, {method:"post", postBody:parameter, onSuccess:profileSubmitCompleted});
	var c = fn.parentNode;
	d0(c);
	target.appendChild(loader());
}

function profileCanceled(e)
{
	
}

function profileSubmitCompleted(xmlhttp)
{
	var result = xmlhttp.responseText.evalJSON(true);
	var msg = false;
	if(result.status)
	{
		msg = "个人设置更新成功！";
		$("username").innerHTML = result.name;
	}
	else
	{
		msg = "个人设置更新失败！请稍后再试！";
	}
	var msgDiv = create("div", {html:msg, css:"important"});
	removeChilds($(result.target));
	$(result.target).appendChild(getListTitle());
	$(result.target).appendChild(msgDiv);
}

function submitCompleted(responseDom)
{
	var result = responseDom.responseText.evalJSON(true);
	var marker = app.activeMarker;
	marker.removeable = false;
	var i = app.map.getInfoWindow();
	var dom = i.getContentContainers()[0];
	
	marker.disableDragging();
	var info = create("div");
	if(result.status)
	{
		marker.tag = result.fid;
		marker.init = false;
		GEvent.addListener(marker, "click", function(){
			if(!marker.init)
			{    	
			   	app.activeMarker = marker;
				marker.openInfoWindowHtml(loader());	    	
				getFeatureInfo(marker);
			}
			else
			{
			    openMarkerInfo(marker, marker.info);
			}	    	
		});
	}		
	else
	{
		info.appendChild(create("text", "添加信息失败！"));
	}	
	marker.closeInfoWindow();
}
function changeSalerent(e)
{
	var fn = app.activeMarker.info.getElementsByTagName('form')[0];	//form node
	var inputs = fn.getElementsByTagName("input");
	var s = inputs["salepricefield"];
	s.disabled = false;
	var r = inputs["rentpricefield"];
	r.disabled = false;
	if(e.selectedIndex == 1)
	{		
		r.disabled = true;
	}
	else if(e.selectedIndex == 2)
	{
		s.disabled = true;
	}
}

function changecity()
{
	var a = $("location").getElementsByTagName("a")[0];
	if($("location").getElementsByTagName("div").length == 0)
	{
		var citydlg = $("citydialog").getElementsByTagName("div")[0].cloneNode(true);
		$("location").appendChild(citydlg);
	}
	else
	{
		var dlg = $("location").getElementsByTagName("div")[0];
		if(Element.visible(dlg))
		{
			Element.hide(dlg);
			a.innerHTML = "改变";
		}
		else
		{
			Element.show(dlg);
			a.innerHTML = "关闭";
		}
	}
}

function setCookie(c_name,value,expiredays)
{
	var exdate=new Date();
	exdate.setDate(exdate.getDate()+expiredays);
	document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
function selectcity(cid, cname, lat, lng)
{
	app.cid = cid;
	var a = $("location").getElementsByTagName("a")[0];
	var c = $("location").getElementsByClassName("name");
	if(c)
	{
		c[0].innerHTML = cname;
	}
	if(app.map)
	{
		app.map.setCenter(new GLatLng(lat, lng));
	}
	if(app.activeFunc)
	{
		if(app.activeFunc == getLMarkers || app.activeFunc == getPropertiesInRect)
		{
			app.activeFunc("listwrapper", 1);
		}
	}
	if($("targetcityfield"))
	{
		changeSelectByValue($("targetcityfield"), cid); 
	}
	// move map to the center of selected city
	
	//hide the dialog if show
	var dlg = $("location").getElementsByTagName("div")[0];
	if(Element.visible(dlg))
	{
		Element.hide(dlg);
		a.innerHTML = "改变";
	}
	// set cid to cookie
	setCookie("CID", cid, 30);
}