/* Common Utility functions*/ 
//
//	addEvent 
//
if (typeof sg == "undefined") {
    var sbase = "/vebra";
} else {
    var sbase = "/" + sg;
}

function addEvent( obj, type, fn ) {
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
		EventCache.add(obj, type, fn);
	}
	else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}

var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				}
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				}
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				}
				item[0][item[1]] = null;
			}
		}
	};
}();

/*  getElementsByClassName.
	Written by Jonathan Snook, http://www.snook.ca/jonathan
	Add-ons by Robert Nyman, http://www.robertnyman.com
*/

function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
} 

/* Get the map Link*/
var http;
function mapReq(method, url, callback){
	var sUrl = url + '?rnd='+ new Date().getTime();
	http.open(method, sUrl, 'true');
	http.onreadystatechange = callback;
	http.send(null);
}
function getMapLink() {
    var rand = new Date().getTime()
    var url = "/agents/ajax/mapurl.aspx?rand=" + rand;
	http = AJAX.create();
    mapReq("GET", url, responseAjax);
}

function responseAjax() {
	if(http.readyState == 4) {
        if(http.status == 200) {
            searchmap_url = http.responseXML.getElementsByTagName("searchmap_url")[0];
            AddLink(searchmap_url);
        }
    }
}

function AddLink(searchmap_url) {
	if (!document.getElementById) return false;
	if (document.getElementById("noresults")) return false;
	if (!document.getElementById("rs-mapnojs")) return false;
	
	var rsmaplinkahref = document.createElement("a");
	
	rsmaplinkahref.setAttribute("href", searchmap_url.firstChild.nodeValue);
	rsmaplinkahref.setAttribute("title", "View a map of your results");
	var rsmaplinktext = document.createTextNode("View properties on map");
    rsmaplinkahref.appendChild(rsmaplinktext);
	var refine = document.getElementById("rs-mapnojs");
    refine.replaceChild(rsmaplinkahref,refine.childNodes[0]);
    refine.setAttribute("id","rs-map");
}


function printButton() {
    if(document.getElementById('utilitynav')){
        var oCnt = document.getElementById('utilitynav');
        var printer = document.createElement('p');
        printer.id = 'print';
        var printLink = document.createElement('a');
        var printText = document.createTextNode('Print');
        
        printLink.title = 'Print a printer-friendly version of this page';
        printLink.href = '#';
        printLink.onclick = function(){ window.print(); return false; };
        
        printLink.appendChild(printText);
        printer.appendChild(printLink);
        oCnt.appendChild(printer);
        //oCnt.parentNode.insertBefore(printer, oCnt);
        
    }
}

/* AJAX */
var AJAX = {
	http: Object,
	response : null,
	create : function() {
		var request = false;
		if(window.XMLHttpRequest) {
			request = new XMLHttpRequest();
		} else if(window.ActiveXObject) {
			try {
				request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(err1) {
				try {
					request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch(err2) {
					request = false;
				}
			}
		}
		return request;
	},
	sndReq :function(method, url, callback){
		AJAX.http = AJAX.create();
		AJAX.http.open(method, url, 'true');
		AJAX.http.onreadystatechange = callback;
		AJAX.http.send(null);
	}
};
/* Add to shortlist functions for results page */

var sl = {
	oShortlist : Object,
	shortLinks : Object,
	oProp : null,
	url : String,
	AJAX : null ,
	sAdd : 'Add to shortlist',
	sRem : 'Remove from shortlist',
	init : function() { 
		sl.shortLinks = getElementsByClassName(document.getElementById('rs-container'), 'li', 'shortlist');
		sl.oShortlist = document.getElementById('shortlist');
		for(var i=0;i<sl.shortLinks.length;i++){addEvent(sl.shortLinks[i], 'click', sl.addShortlist);}
		sl.url = sbase + "/ajax/shortlist?" + (new Date().getTime());
		AJAX.sndReq("GET", sl.url, sl.handleResponse);
	},
	handleResponse : function() {
		if(AJAX.http.readyState == 4 && AJAX.http.status == 200){
			//Update shortlist markup
			if(sl.oShortlist){sl.oShortlist.innerHTML = AJAX.http.responseText;}
			//Apply yellowfade
			if(document.getElementById('s' + sl.propid)){ Fade(document.getElementById('s' + sl.propid));}
			//Update shortlist in topnav
			updateShortlist(sl.oShortlist.getElementsByTagName('li').length);
			var slLinks = getElementsByClassName(sl.oShortlist, 'a', 'remove');
			for (var j=0;j<slLinks.length;j++){
				addEvent(slLinks[j].parentNode, 'click', sl.addShortlist);
			}
		}
	},
	addShortlist : function(e) {
		e.returnValue = false; // for IE
		if (typeof e.preventDefault == 'function'){e.preventDefault();}	
		var propLink = this.getElementsByTagName('a')[0];
		sl.propid = (propLink.href.substr(propLink.href.lastIndexOf('/')+1));
		//Update URL
		sl.url = sbase + "/ajax/shortlist/";
		if(propLink.className.indexOf('remove')!= -1) { 
            sl.url += 'remove=' + sl.propid ;
            sl.rateLink('remove');
        } else {
            sl.url += 'add=' + sl.propid;
            sl.rateLink('add');
        }
		//Update shortlist
		sl.oProp = document.getElementById('s' + sl.propid);
		AJAX.sndReq("GET", sl.url, sl.handleResponse);
		//Change link value
		sl.toggleLink(propLink);
		if(document.getElementById('p' + sl.propid)) var link2 = getElementsByClassName(document.getElementById('p' + sl.propid), 'a', 'remove');
		var propDetails = getElementsByClassName(document, '*', ('p'+sl.propid));
		if(propDetails.length>0) var link2 = getElementsByClassName(document.getElementById('dtbl'), 'a', 'remove');
		if (link2 && propLink.parentNode.className == 'sremove') {
		    sl.toggleLink(link2[0]);
		}
	},
	rateLink : function(toggle){
	    var oProp = document.getElementById('p' + sl.propid);
	    if(oProp){
		    var oRankLink = (getElementsByClassName(oProp, 'li', 'rankproperty'))[0];
		    if (toggle =='remove'){
			    oRankLink.parentNode.removeChild(oRankLink);
		    } else {
			    oRankLink = '<a href="' + sbase + '/property/search/shortlist#p' + sl.propid +'" title="Rate this property in your shortlist">Rate this property</a>';
			    var newRank = document.createElement('li');
			    newRank.className = 'rankproperty';
			    newRank.innerHTML = oRankLink;
			    var oLinksContainer = (getElementsByClassName(oProp, 'ul', 'rsbl'))[0];
			    oLinksContainer.appendChild(newRank);
		    }
	    }
    },
	toggleLink : function(link){
		if(link.firstChild.nodeValue == sl.sAdd) {
			link.firstChild.nodeValue = sl.sRem;
			link.className = 'remove';
		}else {
			link.firstChild.nodeValue = sl.sAdd;
			link.className = '';
		}
		Fade(link);
	}
}

function updateShortlist(num) {
	var oNav = document.getElementById('utilitynav');
	var oSLNav = document.getElementById('nav-shortlist');
	if (num <=0){ 
		if(oSLNav) oNav.removeChild(oSLNav); 
		return false;
	}
	if(oSLNav){
		var propNo = oSLNav.getElementsByTagName('strong')[0];
		propNo.firstChild.nodeValue = num;
	} else {
		var newSLNav = document.createElement('li');
		newSLNav.id = 'nav-shortlist';
		newSLNav.innerHTML = '<a href="' + sbase +'/property/search/shortlist" title="View your shortlisted properties">Shortlist (<strong>'+num+'</strong>)</a>';
		oNav.insertBefore(newSLNav, document.getElementById('help'));
	}

}
getMapLink(); 
printButton();
sl.init();