


function hideDiv( whichLayer ) {
	var elem, vis;
	
	if( document.getElementById ) {// this is the way the standards work
    elem = document.getElementById( whichLayer );
  } else if( document.all ) {// this is the way old msie versions work
      elem = document.all[whichLayer];
  } else if( document.layers ) {// this is the way nn4 works
    elem = document.layers[whichLayer];
  }
  
  vis = elem.style;
  
   if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)
    vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none';
  vis.display = (vis.display==''||vis.display=='block')?'none':'block';

}

function toggleLayer( whichLayer, hide1, hide2 )
{
 var elem, vis, hideonevis, hidetwovis, hideone, hidetwo;
  if( document.getElementById ) {// this is the way the standards work
    elem = document.getElementById( whichLayer );
    hideone = document.getElementById( hide1 );
    hidetwo = document.getElementById( hide2 );
  } else if( document.all ) {// this is the way old msie versions work
      elem = document.all[whichLayer];
      hideone = document.all[hide1];
      hidetwo = document.all[hide2];
  } else if( document.layers ) {// this is the way nn4 works
    elem = document.layers[whichLayer];
    hideone = document.layers[hide1];
    hidetwo = document.layers[[hide2]];
  }
  vis = elem.style;
  // if the style.display value is blank we try to figure it out here
  if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)
    vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none';
  vis.display = (vis.display==''||vis.display=='block')?'none':'block';
  
  hideonevis = hideone.style;
  // if the style.display value is blank we try to figure it out here
  if(hideonevis.display==''&&hideone.offsetWidth!=undefined&&hideone.offsetHeight!=undefined)
    hideonevis.display = (hideone.offsetWidth!=0&&hideone.offsetHeight!=0)?'block':'none';
  hideonevis.display = (hideonevis.display==''||hideonevis.display=='block')?'none':'block';

  hidetwovis = hidetwo.style;
  // if the style.display value is blank we try to figure it out here
  if(hidetwovis.display==''&&hidetwo.offsetWidth!=undefined&&hidetwo.offsetHeight!=undefined)
    hidetwovis.display = (hidetwo.offsetWidth!=0&&hidetwo.offsetHeight!=0)?'block':'none';
  hidetwovis.display = (hidetwovis.display==''||hidetwovis.display=='block')?'none':'block';
    
 }
 		
function createRequestObject() {

	var req;

	if(window.XMLHttpRequest){
		// Firefox, Safari, Opera...
		req = new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		// Internet Explorer 5+
		req = new ActiveXObject("Microsoft.XMLHTTP");
	} 

	return req;

}

// Make the XMLHttpRequest object
var http = createRequestObject();

function sendRequest(act) {
	
	// Open PHP script for requests
	http.open('get', '/includes/ajax.php?act='+act);
	http.onreadystatechange = handleResponse;
	http.send(null);

}

function handleResponse() {

	if(http.readyState == 4 && http.status == 200){

		// Text returned FROM PHP script
		var response = http.responseText;

		if(response) {
			// UPDATE ajaxTest content                
			document.getElementById("myproperty").innerHTML = response;
			// setTimeout(countPosts,20);
		}

	}
}	
		
var map;
var icon = new Array();

function NtoA(a) { b = new Array(); b[0] = a; return b; }
function StoA(a) { b = a.split(','); c = new Array(); for(var d in b) c[c.length] = parseInt(b[d]); return c; }
function isFunction(a) { return typeof a == 'function'; }
function isNull(a) { return typeof a == 'object' && !a; }
function isNumber(a) { return typeof a == 'number' && isFinite(a); }
function isObject(a) { return (a && typeof a == 'object') || isFunction(a); }
function isString(a) { return typeof a == 'string'; }
function isUndefined(a) { return typeof a == 'undefined'; } 
function isBoolean(a) { return typeof a == 'boolean'; }
function isArray(a) { return isObject(a) && a.constructor == Array; }

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
      } else if (test!='R') {
        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (val<min || max<val) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
  } if (errors) alert('The following error(s) occurred:\n'+errors);
  document.MM_returnValue = (errors == '');
}

function confirmLink(str) { if (confirm(str)) return true; else return false; }

// is

var is = { init:function() {
  this.ua = navigator.userAgent.toLowerCase();
  this.major = parseInt(navigator.appVersion);
  this.minor = parseFloat(navigator.appVersion);
  this.nav   = ( (this.ua.indexOf('mozilla')!=-1) && ((this.ua.indexOf('spoofer')==-1) && (this.ua.indexOf('compatible') == -1)));
  this.nav4  = (this.nav && (this.major == 4));
  this.nav4up= (this.nav && (this.major >= 4));
  this.nav5up= (this.nav && (this.major >= 5));
  this.gecko = (this.ua.indexOf('gecko') != -1); 
  this.ie    = (this.ua.indexOf("msie") != -1);
  this.ie3   = (this.ie && (this.major == 2));
  this.ie4   = ( this.ie && (this.major == 4) && (this.ua.indexOf("msie 5.0")==-1));
  this.ie4up = (this.ie  && (this.major >= 4));
  this.ie5up = (this.ie && !this.ie3 && !this.ie4);
  this.opera = (this.ua.indexOf("opera") != -1);
  this.hotjava = (this.ua.indexOf("hotjava") != -1); 
  this.webtv = (this.ua.indexOf("webtv") != -1);
  this.aol   = (this.ua.indexOf("aol") != -1); 
  this.safari= (this.ua.indexOf("safari") != -1);
} }
is.init();

// element

var element = {
    id:null,
    el:null,
    something:false,
    init:function(id){
        this.id = id;
        if ( document.getElementById(this.id) ) this.el = document.getElementById(this.id);
        if ( document.all ) this.el = document.all[this.id];
        if ( document.layers ) this.el = document.layers[this.id];
        },
    setwidth:function(w){
        if (is.opera) this.el.style.pixelWidth = w;
        else this.el.style.width = w+'px';
        }
    }

// viewport

var viewport = {
  getWinWidth: function () {
    this.width = 0;
    if (window.innerWidth) this.width = window.innerWidth - 18;
    else if (document.documentElement && document.documentElement.clientWidth)
        this.width = document.documentElement.clientWidth;
    else if (document.body && document.body.clientWidth)
        this.width = document.body.clientWidth;
    return this.width;
  },

  getWinHeight: function () {
    this.height = 0;
    if (window.innerHeight) this.height = window.innerHeight - 18;
    else if (document.documentElement && document.documentElement.clientHeight)
        this.height = document.documentElement.clientHeight;
    else if (document.body && document.body.clientHeight)
        this.height = document.body.clientHeight;
    return this.height;
  },

  getScrollX: function () {
    this.scrollX = 0;
    if (typeof window.pageXOffset == "number") this.scrollX = window.pageXOffset;
    else if (document.documentElement && document.documentElement.scrollLeft)
        this.scrollX = document.documentElement.scrollLeft;
    else if (document.body && document.body.scrollLeft)
        this.scrollX = document.body.scrollLeft;
    else if (window.scrollX) this.scrollX = window.scrollX;
    return this.scrollX;
  },

  getScrollY: function () {
    this.scrollY = 0;
    if (typeof window.pageYOffset == "number") this.scrollY = window.pageYOffset;
    else if (document.documentElement && document.documentElement.scrollTop)
        this.scrollY = document.documentElement.scrollTop;
    else if (document.body && document.body.scrollTop)
        this.scrollY = document.body.scrollTop;
    else if (window.scrollY) this.scrollY = window.scrollY;
    return this.scrollY;
  },

  getAll: function () {
    this.getWinWidth(); this.getWinHeight();
    this.getScrollX();  this.getScrollY();
  }

}

// event

var dw_event = {

  add: function(obj, etype, fp, cap) {
    cap = cap || false;
    if (obj.addEventListener) obj.addEventListener(etype, fp, cap);
    else if (obj.attachEvent) obj.attachEvent("on" + etype, fp);
  },

  remove: function(obj, etype, fp, cap) {
    cap = cap || false;
    if (obj.removeEventListener) obj.removeEventListener(etype, fp, cap);
    else if (obj.detachEvent) obj.detachEvent("on" + etype, fp);
  },

  DOMit: function(e) {
    e = e? e: window.event;
    e.tgt = e.srcElement? e.srcElement: e.target;
    if (!e.preventDefault) e.preventDefault = function () { return false; }
    if (!e.stopPropagation) e.stopPropagation = function () { if (window.event) window.event.cancelBubble = true; }
    return e;
  }

}


var stopTicker=true;
var widthTicker=0;
var frameTicker=0;

function startTicker(w,f) { stopTicker=false; widthTicker=w; frameTicker=f; doTicker(); }

function doTicker()
    {
    if (stopTicker) return;
    var objTicker=document.getElementById("ticker");
    var intPos=Number(objTicker.style.left.substring(0,objTicker.style.left.length-2));
    intPos-=2;
    if (intPos<-widthTicker) intPos=frameTicker;
    objTicker.style.left = String(intPos+"px");
    setTimeout("doTicker();",25);
    }

// poppup image

function imgPopup(width,height,location,description) {
    height+=40; width+=60;
    var options,needscroll=false,top=(screen.availHeight-height)/2,left=(screen.availWidth-width)/2;
    options = "top="+top+",left="+left+",location=0,status=0,";
    options = options+"toolbar=0,menubar=0,directories=0,width="+width;
    options = options + ",height="+height;
    options = "scrollbars=1,resizable=0," + options;
    if (window.popup) popup.close();
    popup=window.open("",description,options);
    popup.document.open();
    popup.document.write("<html><head><title>"+description+"</title></head><body marginwidth=\"0\" marginheight=\"0\" leftmargin=\"0\" topmargin=\"0\" rightmargin=\"0\" bottommargin=\"0\" onload=\"window.focus();\"><div align=\"center\"><a href=\"javascript:window.close();\"><img src="+location+" border=\"0\" style=\"margin:20px;\" alt=\"Click image to close\" /></a></div></body></html>");
    popup.document.close();
    }

// register page agent selection

function selectTab(n,col)
    {
    var h = { 1:'GG',2:'GG',3:'GG',4:'GG' };
    var c = { 1:'GGGG',2:'GGGG',3:'GGGG',4:'GG' };
    var z = { 1:1,2:2,3:3,4:4 };
    z[n] = 100;
    h[n] = col;
    c[n] = col+'GG';
    if (n==4) c[n] = col;
    if (n>1) c[n-1] = 'GG'+col;
    for(var i=1; i <= 4; i++)
        {
        var panelDiv = MM_findObj("panel"+i);
        var tabDiv = MM_findObj("tab"+i);
        panelDiv.style.zIndex = z[i];
        tabDiv.className = 'header'+h[i]+' corner'+c[i];
        }
    }

// form validation

function validate_price_range(frm)
    {
    var min = parseInt(frm.n.value);
    var max = parseInt(frm.m.value);
    if ((min == 0) && (max > 0)) return true;
    if ((min > 0) && (max == 0)) return true;
    if ((min > 0) && (max > 0) && (max > min)) return true;
    alert('Please select a price range');
    return false;
    }

// front page slideshow

var slideCache = new Array();
var slidePos = 0;
var slideFiles = new Array();
var slideDiv = 'ofDayContainerSlideDiv';
var slideImg = 'ofDayContainerSlideImg';

function slideShow()
    {
    if (slideFiles[0] == null) return;
    slideOpac(0);
    var fd = MM_findObj(slideDiv);
    var fi = MM_findObj(slideImg);
    fd.style.backgroundImage = "url("+fi.src+")";
    fi.src = imgp(slideFiles[slidePos],'L','L','jpg');
    for(var i=0;i<=100;i++) setTimeout("slideOpac("+i+")",(i*10));
    setTimeout("slideShow()",3000);
    slidePos++;
    if (slidePos == slideFiles.length) slidePos = 0;
    if (slideCache[slidePos] == null)
        {
        slideCache[slidePos] = new Image;
        slideCache[slidePos].src = imgp(slideFiles[slidePos],'L','L','jpg');
        }
    }

function slideOpac(opacity)
    {
    var f = MM_findObj(slideImg);
    f.style.opacity = (opacity/101);
    f.style.MozOpacity = (opacity/101);
    f.style.KhtmlOpacity = (opacity/101);
    f.style.filter = "alpha(opacity="+opacity+")";
    }

// overseas search population

function ospopulate(val)
    {
    var ss,sss;
    var f2 = MM_findObj('g');
    ss = val.split("|||");
    f2.disabled = false;
    f2.options.length = 0;
    f2.options[f2.options.length] = new Option('Select a region..',ss[0]);
    if (ss.length > 1)
        {
        for (i = 1; i < ss.length; i++)
            {
            sss = ss[i].split("||");
            f2.options[f2.options.length] = new Option(sss[1],sss[0]);
            }
        }
    }

// map data

var displayedAgentData = new Array();
var displayedBranchData = new Array();
var displayedPropertyData = new Array();

// spf valuation dropdown population

function spfvalpop()
    {
    var n = '';
    var f0 = MM_findObj('agentw');
    var f1 = MM_findObj('agent1');
    var f2 = MM_findObj('agent2');
    var f3 = MM_findObj('agent3');
    var fe = new Array();
    for (var j in myRegionData) fe[j] = new Array();
    for (var j in myRegionData) for (var i in myBranchData)
        if ((myBranchData[i][2] & myRegionData[j][6]) && (myBranchData[i][8] & f0.value))
            fe[j][fe[j].length] = i;
    f1.disabled = false; f2.disabled = false; f3.disabled = false;
    f1.options.length = 0; f2.options.length = 0; f3.options.length = 0;
    f1.options[f1.options.length] = new Option('','');
    f2.options[f2.options.length] = new Option('','');
    f3.options[f3.options.length] = new Option('','');
    for (var j in myRegionData) if (isArray(fe[j])) if (fe[j].length > 0)
        {
        f1.options[f1.options.length] = new Option(myRegionData[j][1].toUpperCase(),'');
        f2.options[f2.options.length] = new Option(myRegionData[j][1].toUpperCase(),'');
        f3.options[f3.options.length] = new Option(myRegionData[j][1].toUpperCase(),'');
        for (var i in fe[j])
            {
            n = '  '+myAgentData[myBranchData[fe[j][i]][1]][1]+' - '+myBranchData[fe[j][i]][3];
            f1.options[f1.options.length] = new Option(n,fe[j][i]);
            f2.options[f2.options.length] = new Option(n,fe[j][i]);
            f3.options[f3.options.length] = new Option(n,fe[j][i]);
            }
        }
    }

// spf weekly dropdown population

function spfwpopulate(type)
    {
    var f1 = MM_findObj('spfw1');
    if (!f1) return;
    f1.disabled = false; f1.options.length = 0;
    if (!myWeeklyData[type]) return;
    f1.options[0] = new Option('2. Select an agent','');
    for (var i in myWeeklyData[type])
        f1.options[f1.options.length] = new Option(myWeeklyData[type][i],i);
    }

// old frontpage spf weekly dropdown population

function spfwpopulate1()
    {
    var f1 = MM_findObj('spfw1');
    if (!f1) return;
    f1.disabled = false; f1.options.length = 0;
    f1.options[0] = new Option('2. Select a region','');
    for (var i in myRegionData)
        f1.options[f1.options.length] = new Option(myRegionData[i][1],myRegionData[i][0]);
    }

function spfwpopulate2()
    {
    var f0 = MM_findObj('spfw0');
    var f1 = MM_findObj('spfw1');
    var f2 = MM_findObj('spfw2');
    if (!f2) return;
    f2.disabled = false;
    f2.options.length = 0;
    f2.options[f2.options.length] = new Option ('3. Select an agent','');
    for (var i in myBranchData)
        if ((myBranchData[i][2] & myRegionData[f1.value][6]) && (myBranchData[i][8] & f0.value))
            f2.options[f2.options.length] = new Option(myAgentData[myBranchData[i][1]][1]+' - '+myBranchData[i][3],myBranchData[i][0]);
    }

// new SPF march 07

function spfOne()
    {
    var one = MM_findObj('spf1');
    var two = MM_findObj('spf2');
    if (!one.value) { two.disabled = true; return; }
    two.disabled = false;
    two.options.length = 0;
    two.options[two.options.length] = new Option ('Please select a paper','');
    two.options[two.options.length] = new Option ('All of '+myRegionData[one.value][1],myRegionData[one.value][0]);
    for (var i in myRegionData)
        {
        if (myRegionData[i][7] != one.value) continue;
        two.options[two.options.length] = new Option (myRegionData[i][1],myRegionData[i][0]);
        }
    }

function spfTwo()
    {
    var two = MM_findObj('spf2');
    text = myRegionData[two.value][1]+' '+myRegionData[two.value][8];
    changeContent('SPFWeeklyStrapInner',text);
    }

function spfGo()
    {
    var two = MM_findObj('spf2');
    document.location = '/spf/'+myRegionData[two.value][5];
    }

// map stuff

function fitMap()
    {
    var argv = fitMap.arguments;
    if (!isArray(argv[0]) && (argv.length == 2)) var argv = new Array(new Array(argv[0],argv[1]));
    if (isArray(argv[0]) && (argv.length == 1)) argv = argv[0];
    map.setCenter(new GLatLng(0,0),0);
    var bounds = new GLatLngBounds();
    for (var i = 0; i < argv.length; i++) bounds.extend(new GLatLng(argv[i][0],argv[i][1]));
    map.setCenter(bounds.getCenter(),Math.min(14,map.getBoundsZoomLevel(bounds)));
    }

// add branch to map

function addBranch()
    {
    var argv = addBranch.arguments;
    if (isArray(argv[0])) argv = argv[0];
    var LLs = new Array();
    for (var i = 0; i < argv.length; i++)
        {
        var theBranch = myBranchData[argv[i]];
        if (!theBranch[4]) continue;
        var theAgent = myAgentData[theBranch[1]];
        var atext = '';
        atext = atext + '<table border="0" cellpadding="0" cellspacing="0" width="316"><tr><td valign="top" class="bubble" width="106">';
        atext = atext + '<a href="/agent/'+theBranch[0]+'"><img src="/imga/M/'+theAgent[0]+'.gif" width="106" height="93" border="0" alt="'+theAgent[1]+'" /></a>';
        atext = atext + '</td><td><img src="/img/pad.gif" width="10" height="90" /><td valign="top" class="bubble" width="210">';
        atext = atext + '<h3>'+theAgent[1]+'</h3><h3>'+theBranch[3]+' Branch</h3>';
        atext = atext + '<h3><a href="/search/?q=a'+theBranch[0]+'">View all stock</a></h3>';
        if (theBranch[9]) atext = atext + '<a href="/spf'+theBranch[9]+'" style="color:#d83e14;font-weight:bold;">SPF Weekly Advert</a><br />';
        atext = atext + '</td></tr></table>';
        var ctext = '';
        ctext = ctext + '<table border="0" cellpadding="0" cellspacing="0" width="316"><tr><td valign="top" class="bubble" width="106">';
        ctext = ctext + '<a href="/agent/'+theBranch[0]+'"><img src="/imga/M/'+theAgent[0]+'.gif" width="106" height="93" border="0" alt="'+theAgent[1]+'" /></a>';
        ctext = ctext + '</td><td><img src="/img/pad.gif" width="10" height="90" /><td valign="top" class="bubble" width="210">';
        ctext = ctext + '<h3>'+theAgent[1]+'</h3>';
        ctext = ctext + '<p>'+theBranch[7]+'</p>';
        ctext = ctext + '<p><b>'+theBranch[6]+'</b></p>';
        ctext = ctext + '<p><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;'+theBranch[10]+'">'+theBranch[10]+'</a></p>';
        ctext = ctext + '</td></tr></table>';
        displayedBranchData[argv[i]] = addIcon(theBranch[4],theBranch[5],theAgent[2],{'Agent':atext,'Contact':ctext});
        LLs[LLs.length] = new Array(theBranch[4],theBranch[5]);
        }
    fitMap(LLs);
    }

// remove branch from map

function removeBranch()
    {
    var argv = removeBranch.arguments;
    if (isArray(argv[0])) argv = argv[0];
    for (var i = 0; i < argv.length; i++)
        if (!isNull(displayedBranchData[argv[i]]))
            {
            map.removeOverlay(displayedBranchData[argv[i]]);
            displayedBranchData[argv[i]] = null;
            }
    }

// only show branch

function onlyBranch()
    {
    var argv = onlyBranch.arguments;
    if (isString(argv[0])) argv = StoA(argv[0]);
    var a = new Array();
    for (var i = 0; i < argv.length; i++) a[a.length] = argv[i];
    if (a.length) { map.clearOverlays(); addBranch(a); }
    }

// flip state of branch on map

function flipBranch()
    {
    var argv = flipBranch.arguments;
    if (isString(argv[0])) argv = StoA(argv[0]);
    var r = new Array(); var a = new Array();
    for (var i = 0; i < argv.length; i++)
        if (displayedBranchData[argv[i]] != null) r[r.length] = argv[i]; else a[a.length] = argv[i];
    if (r.length) removeBranch(r);
    if (a.length) addBranch(a);
    }

// highlight agent logo

function highlightAgent()
    {
    var argv = highlightAgent.arguments;
    var theAgent = argv[0];
    var theRegion = argv[1];
    var e = document.getElementById('Agent'+theAgent+'Region'+theRegion);
    if (!e) return;
    if (displayedAgentData[theAgent] != null)
        {
        e.src = '/imga/G/'+theAgent+'.gif';
        displayedAgentData[theAgent] = null;
        }
        else
        {
        e.src = '/imga/S/'+theAgent+'.gif';
        displayedAgentData[theAgent] = theAgent;
        }
    }

// move to region

function moveRegion()
    {
    var argv = moveRegion.arguments;
    var theRegion = argv[0];
    map.setCenter(new GLatLng(myRegionData[theRegion][2],myRegionData[theRegion][3]),myRegionData[theRegion][4]);
    }

// enum region contents

function eSPF()
    {
    var argv = eSPF.arguments;
    var theRegion = argv[0];
    var text = '';
    moveRegion(theRegion);
    text = text + 'Please select a paper..<br /><br />';
    text = text + '<a href="/spf/'+myRegionData[theRegion][5]+'"><b>All of '+myRegionData[theRegion][1]+'</b></a><br /><br />';
    for (var i in myRegionData)
        {
        if (myRegionData[i][7] != theRegion) continue;
        text = text + '<a href="/spf/'+myRegionData[i][5]+'"><b>'+myRegionData[i][1]+'</b></a><br />';
        }
    changeContent('sidePanelSPF',text);
    }

function eRegister()
    {
    var argv = eRegister.arguments;
    var theRegion = argv[0];
    var theType = argv[1];
    var text = '', text2 = '';
    text = text + 'Please select a region...<br /><br />';
    for (var i in myRegionData)
        {
        if (myRegionData[i][7] != theRegion) continue;
        text2 = text2 + '<a href="/register/'+theType+'/'+myRegionData[i][5]+'"><b>'+myRegionData[i][1]+'</b></a><br />';
        }
    if (text2 == '') { text = text + '<a href="/register/'+theType+'/'+myRegionData[theRegion][5]+'"><b>All of '+myRegionData[theRegion][1]+'</b></a><br /><br />'; }
    else { text = text + text2 + '<br />'; }
    text = text + '<a href="/register/'+theType+'/'+myRegionData[theRegion][5]+'/other"><b>Other</b>...</a>';
    changeContent('sidePanel'+theType,text);
    }

// add property to map

function addProperty()
    {
    var argv = addProperty.arguments;
    if (isArray(argv[0])) argv = argv[0];
    var LLs = new Array();
    for (var i = 0; i < argv.length; i++)
        {
        var theProperty = myPropertyData[argv[i]];
        if (!theProperty[4]) continue;
        var theBranch = myBranchData[theProperty[1]];
        var theAgent = myAgentData[theBranch[1]];
        var ptext = '';
        ptext = ptext + '<table border="0" cellpadding="0" cellspacing="0" width="315"><tr><td valign="top" class="bubble" width="105">';
        ptext = ptext + '<a href="/property/'+theProperty[0]+'">';
        ptext = ptext + '<img src="'+imgp(theProperty[8],'S',theProperty[7],'jpg')+'" width="105" height="80" border="0" />';
        ptext = ptext + '</a>';
        ptext = ptext + '<h4>'+theProperty[2]+'</h4>';
        ptext = ptext + '</td><td><img src="/img/pad.gif" width="10" height="90" /></td><td valign="top" class="bubble" width="210">';
        ptext = ptext + '<h3>'+theProperty[3]+'</h3>';
        ptext = ptext + '<p>'+theProperty[9]+'</p>';
        ptext = ptext + '</td></tr></table>';
        var atext = '';
        atext = atext + '<table border="0" cellpadding="0" cellspacing="0" width="316"><tr><td valign="top" class="bubble" width="106">';
        atext = atext + '<a href="/agent/'+theBranch[0]+'"><img src="/imga/M/'+theAgent[0]+'.gif" width="106" height="93" border="0" alt="'+theAgent[1]+'" /></a>';
        atext = atext + '</td><td><img src="/img/pad.gif" width="10" height="90" /></td><td valign="top" class="bubble" width="210">';
        atext = atext + '<h3>'+theAgent[1]+'</h3>';
        atext = atext + '<p>'+theBranch[7]+'</p>';
        atext = atext + '<p><b>'+theBranch[6]+'</b></p>';
        atext = atext + '<p><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;'+theBranch[10]+'">'+theBranch[10]+'</a></p>';
        if (theBranch[9]) atext = atext + '<p><a href="/spf'+theBranch[9]+'" style="color:#d83e14;font-weight:bold;">SPF Weekly Advert</a></p>';
        atext = atext + '</td></tr></table>';
        displayedPropertyData[argv[i]] = addIcon(theProperty[4],theProperty[5],theProperty[6],{'Property':ptext,'Contact':atext});
        LLs[LLs.length] = new Array(theProperty[4],theProperty[5]);
        }
    fitMap(LLs);
    }

// remove property from map

function removeProperty()
    {
    var argv = removeProperty.arguments;
    if (isArray(argv[0])) argv = argv[0];
    for (var i = 0; i < argv.length; i++)
        {
        if (!isNull(displayedPropertyData[argv[i]]))
            {
            map.removeOverlay(displayedPropertyData[argv[i]]);
            displayedPropertyData[argv[i]] = null;
            }
        }
    }

// only show property

function onlyProperty()
    {
    var argv = onlyProperty.arguments;
    if (isString(argv[0])) argv = StoA(argv[0]);
    var a = new Array();
    for (var i = 0; i < argv.length; i++) a[a.length] = argv[i];
    if (a.length) { map.clearOverlays(); addProperty(a); }
    }

// flip state of propergty on map

function flipProperty()
    {
    var argv = flipProperty.arguments;
    if (isString(argv[0])) argv = StoA(argv[0]);
    var r = new Array(); var a = new Array();
    for (var i = 0; i < argv.length; i++)
        if (displayedPropertyData[argv[i]] != null) r[r.length] = argv[i]; else a[a.length] = argv[i];
    if (r.length) removeProperty(r);
    if (a.length) addProperty(a);
    }

// initialise map

function init()
    {
    if (!GBrowserIsCompatible()) return false;
    var argv = init.arguments;
    var Full = argv[0] ? true : false;
    var Lon = argv[1] ? argv[1] : startLon;
    var Lat = argv[2] ? argv[2] : startLat;
    var Zoom = argv[3] ? argv[3] : startZoom;
    var Pin = argv[4] ? true : false;
    var m = document.getElementById('map');
    if (typeof(m) == 'undefined') return;
    map = new GMap2(m);

    if (Full)
        {
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.addControl(new GScaleControl());
        map.setCenter(new GLatLng(Lat,Lon),Zoom);
        }
        else
        {
        //map.addControl(new GMapTypeControl());
        map.addControl(new GSmallZoomControl());
        map.setCenter(new GLatLng(Lat,Lon),Zoom);
        }

    var colour = new Array('blue','green','purple','red','white','yellow','black','cyan','orange','RS','RL','NH','OS');
    for (i=0; i<colour.length; i++)
        {
        tmp = new GIcon();
        tmp.image = '/img/google/mm_20_'+colour[i]+'.png';
        tmp.shadow = '/img/google/mm_20_shadow.png';
        tmp.iconSize = new GSize(12,20);
        tmp.shadowSize = new GSize(22,20);
        tmp.iconAnchor = new GPoint(6,20);
        tmp.infoWindowAnchor = new GPoint(5,1);
//        tmp.image = '/img/google/markerE.png';
//        tmp.shadow = '/img/google/mm_50_shadow.png';
//        tmp.iconSize = new GSize(20,34);
//        tmp.shadowSize = new GSize(37,34);
//        tmp.iconAnchor = new GPoint(9,34);
//        tmp.infoWindowAnchor = new GPoint(9,2);
//        tmp.infoShadowAnchor = new GPoint(18,25);
        icon[colour[i]] = tmp;
        }

    if (Pin) addIcon(Lat,Lon,argv[4],'');

    }

// add icon to the map

function addIcon(lat,lon,col,data)
    {
    var marker = new GMarker(new GLatLng(lat,lon),icon[col]);
    if (data)
        {
        if (isString(data))
            {
            GEvent.addListener(marker,'click',function() { marker.openInfoWindowHtml(data); });
            }
        else
            {
            var tabs = new Array();
            for (var i in data) tabs[tabs.length] = new GInfoWindowTab(i,data[i]);
            GEvent.addListener(marker,'click',function() { marker.openInfoWindowTabsHtml(tabs); });
            }
        }
    // GEvent.addListener(marker,'click',function() { marker.showMapBlowup(2); });
    map.addOverlay(marker);
    return marker;
    }

// return a path to a property image, or undefined if 0, or none if not a valid image available

function imgp(id,size,valid,filetype)
    {
    if (!id) return '/imgp/'+size+'/undefined.gif';
    if (valid.indexOf(size) == -1) return '/imgp/'+size+'/none.gif';
    return '/imgp/'+size+'/'+id+'.'+filetype;
    }

function imgd(id,size,valid)
    {
    if (!id) return '/imgd/'+size+'/undefined.gif';
    if (valid.indexOf(size) == -1) return '/imgd/'+size+'/none.gif';
    return '/imgd/'+size+'/'+id+'.jpg';
    }

function imgs(id,size,valid)
    {
    if (!id) return '/imgs/'+size+'/undefined.gif';
    if (valid.indexOf(size) == -1) return '/imgs/'+size+'/none.gif';
    return '/imgs/'+size+'/'+id+'.jpg';
    }

// generic functions

function changeContent(ele,val)
    {
    if (document.all) // IE4+
        {
        el = document.all[ele];
        if (typeof(el) != "undefined") el.innerHTML = val;
        }
    else if (document.getElementById) // DOM
        {
        rng = document.createRange();
        el = document.getElementById(ele);
        if ((el != null) && (typeof(el) != "undefined"))
            {
            rng.setStartBefore(el);
            htmlFrag = rng.createContextualFragment(val);
            while (el.hasChildNodes()) el.removeChild(el.lastChild);
            el.appendChild(htmlFrag);
            }
        }
    else if (document.layers) // NS4
        {
        el = document.layers[ele];
        if (typeof(el) != "undefined")
            {
            el.document.open();
            el.document.write(val);
            el.document.close();
            }
        }
    }

function changeImgSrc(id,v)     { var el = document.getElementById(id); if (el) el.setAttribute('src',v); }
function changeClass(id,v)      { var el = document.getElementById(id); if (el) el.className = v; }
function changeColor(id,v)      { var el = document.getElementById(id); if (el) el.style.color = v; }
function changeVisibility(id,v) { var el = document.getElementById(id); if (el) el.style.visibility = v ? 'visible' : 'hidden'; }
function changeHeight(id,v)     { var el = document.getElementById(id); if (el) el.style.height = v+'px'; }
function changeBgImage(id,v)    { var el = document.getElementById(id); if (el) el.style.backgroundImage = 'url('+v+')'; }
function changeOpacity(id,v)    { var el = document.getElementById(v); if (el) { el.style.opacity = (v/101); el.style.MozOpacity = (v/101); el.style.KhtmlOpacity = (v/101); el.style.filter = "alpha(opacity="+v+")"; } };

// switch an image over

function imgSwitch(id,type,filetype)
    {
    if (type == 'F') { imgPopup(600,600,imgp(id,'F','F',filetype),'Floorplan'); return; }
    resetvtScroll();
    changeImgSrc('switchImg',imgp(id,'I','I',filetype));
    changeImgSrc('vtImg',imgp(id,'I','I',filetype));
    if (type == 'V')
        {
        changeVisibility('vtLeft',true);
        changeVisibility('vtRight',true);
        }
        else
        {
        changeVisibility('vtLeft',false);
        changeVisibility('vtRight',false);
        }
    }

// virtual tour code

var stopvtScroll=false;
var vtImgWidth=0;

function resetvtScroll()
    {
    var el=document.getElementById("vtScroll");
    // alert('resetting vtScroll left position from '+el.style.left+' to 0px');
    el.style.left = String("1px");
    el.style.left = String("0px");
    // alert('vtScroll left position now at '+el.style.left);
    }

function startvtScroll(i)
    {
    stopvtScroll=false;
    dovtScroll(i);
    vtImgWidth = Number(document.getElementById("vtImg").width);
    }

function dovtScroll(i)
    {
    if (stopvtScroll) return;
    var el=document.getElementById("vtScroll");
    var intPos=Number(el.style.left.substring(0,el.style.left.length-2));
    intPos+=i*6;
    if (intPos > 0) intPos -= vtImgWidth;
    if (intPos < -vtImgWidth) intPos += vtImgWidth;
    el.style.left = String(intPos+"px");
    setTimeout("dovtScroll("+i+");",20);
    }

// scroller code

var boolHoldScrollerBuy=false; var scrollerItemsBuy=0;
function animScrollerBuy(i)
{
    if (i>0) scrollerItemsBuy = i;
    var objScroller=document.getElementById("ofWeekBuyScroll");
    var intPos=Number(objScroller.style.left.substring(0,objScroller.style.left.length-2));
    var dist=Number(scrollerItemsBuy*111);
    if(!boolHoldScrollerBuy) intPos--;
    if(intPos<=-dist) intPos+=dist;
    objScroller.style.left=String(intPos+"px");
    setTimeout("animScrollerBuy(0);",25);
}
var boolHoldScrollerLet=false; var scrollerItemsLet=0;
function animScrollerLet(i)
{
    if (i>0) scrollerItemsLet = i;
    var objScroller=document.getElementById("ofWeekLetScroll");
    var intPos=Number(objScroller.style.left.substring(0,objScroller.style.left.length-2));
    var dist=Number(scrollerItemsLet*111);
    if(!boolHoldScrollerLet) intPos--;
    if(intPos<=-dist) intPos+=dist;
    objScroller.style.left=String(intPos+"px");
    setTimeout("animScrollerLet(0);",25);
}

// debug functions

function print_r(theObj,bReturnString,sIndent){
    if(undefined===bReturnString) bReturnString = true;
    if(undefined===sIndent) sIndent = '';
    if(undefined===theObj || null===theObj){// detect if it has no properties
        var s = theObj;
    } else {
        var s = '';
        if(theObj.constructor == Array ||
            theObj.constructor == Object){
            var sConstructor = Array === theObj.constructor
                ? 'Array'
                : 'Object'; // improve me
            s += sConstructor + "\n"+sIndent+"(";
            var sChildNameIndent = sIndent + str_repeat(' ',4);
            var sChildContentsIndent = sIndent + str_repeat(' ',8);
            for(var p in theObj){
                s += "\n"+ sChildNameIndent + "[" + p + "] => ";
                s += print_r(theObj[p],true,sChildContentsIndent);
            }
            s += "\n" + sIndent + ")";
        } else {
            s += theObj; // expect null, string, integer, boolean, etc.
        }
    }
    if(bReturnString) { return s; }
    else { document.write("<PRE>"+s+"</PRE>"); return null; }
}
function str_repeat(s,n)
{
    var sRet = '';
    while ( n-- > 0 ) sRet += s;
    return sRet;
}

function calcRental() {
	with (document.rental) {
		if (checkNumber(rental.value) && rental.value>0  && checkNumber(deposit.value) && deposit.value>0) {
		  	
		  	var therentalcost = rental.value;
		  	var themoveincost = 0;
		  	var thedeposit = 0;
			var numtenants = parseInt(tenants.value);
			var tenantscost = 0;
			var vat = 1.175;
					  	
		  	thedeposit = parseInt(therentalcost) + parseInt(100);
		  	
		  	deposit.value = thedeposit;
		  	
		  	switch( numtenants ) {
		  		case 1:
		  			tenantscost = 150 * vat;
		  			break
		  		case 2:
		  			tenantscost = 200 * vat;
		  			break
		  		case 3:
		  			tenantscost = 225 * vat;
		  			break
		  		case 4:
		  			tenantscost = 250 * vat;
		  			break
		  		default:
		  			tenantscost = 250 * vat;
		  			break
		  	}
		  	
		  	themoveincost = parseInt(rental.value) + parseInt(thedeposit) + tenantscost;
		  	
		  	moveincost.value = formatNumber(themoveincost,2,1);
		}
	}
}


function calcMortgage()
    {
    with (document.mortgage) {
    
       if (checkNumber(principal.value) && principal.value>0 && checkNumber(years.value) && years.value>0 &&
          checkNumber(rate.value) && rate.value>0) {
    
//           var amount = principal.value * 0.9;
          var lnAmt = Math.min(parseFloat(principal.value),10000000);
          principal.value = lnAmt;
          var lnRate = Math.min(parseFloat(rate.value),999.99);
          rate.value = lnRate;
          lnRate = lnRate/1200;
          var lnYears = Math.min(parseFloat(years.value),100);
          years.value = lnYears;
          if (interestonly.checked) {
             monthly.value = formatNumber(lnAmt*lnRate,2,1);
             // interest.value = formatNumber(lnAmt*lnRate*lnYears*12,2,1);
          } else {
             var lnMonthly = formatRound(calcPayment(lnAmt,lnRate,lnYears*12));
             monthly.value = formatNumber(lnMonthly,2,1);
             // interest.value = formatNumber((lnMonthly*lnYears*12)-principal.value,2,1);
           }
       } else {
             monthly.value = "";
             // interest.value = "";
       }
    
    }
}

function calcPayment (amount,rate,time,balloon) {
   if (rate<=0) {
      if (time<=0) {
        return amount;
      } else {
        return amount/time;
      }
   }
   if (balloon==null) balloon = 0;
   
   var ln = Math.pow(1+rate,time);
   return (amount-balloon/ln)/((1-(1/ln))/rate);
}

function checkNumber(number, msg, min, max) {
   msg = msg+" field has invalid numeric data: "+number.value;
   var str = number.value;
   if (str==null || str=="" || !str) return true;
   if (str.substring(1,1)=="$") {
      str = str.substring(2);
   }
   if (!validNumber(str)) {
      alert(msg);
      return false;
   }
   var num = parseFloat(str);
   if (min!=null && max!=null) {
      if (num<min || num>max) {
         alert(msg+" not in range ["+min+".."+max+"]");
         return false;
      }
   }
   number.value = str;
   return true;
}

function validNumber(number) {
   var checknum = parseFloat(number);
   if (isNaN(checknum)) return false;
   return true;
}

function formatRound(number,precision) {
   if (precision==null) precision = 2;
   if (precision==0) {
      return Math.round(number);
   }
   lnFactor = Math.floor(Math.pow(10,precision));
   if (precision<0) {
      return  Math.round(number/lnFactor)*lnFactor;
   }
   
   return Math.round(number*lnFactor)/lnFactor;
}

function formatNumber(number,precision,commas) {
   if (precision==null) precision = 2;
   number = formatRound(number,precision);
   var llSign = number<0;
   number = Math.abs(number);
   var ln = precision+1;
   var lc = "";
   number = Math.floor(number*Math.pow(10,precision));
   while (((ln--)>0) || (number>0)) {
      lc = (number%10)+lc;
      number = Math.floor(number/10);
      if (ln==1) lc = "."+lc;
   }
   if (llSign) lc = "-"+lc;
   var lc2 = "";
   if (commas) {
      var lc3 = lc;
      ln = lc.length;
      if (lc.indexOf(".")!=-1) {
         lc2 = lc.substring(lc.indexOf("."),ln);
         lc3 = lc.substring(0,lc.indexOf("."));
      }
      ln = lc3.length;
      var lnCount = 0;
      while (ln>0) {
         lnCount++;
         if (lnCount==4) {
            lc2 = ","+lc2;
            lnCount = 1;
         } 
         lc2 = lc3.substring(ln-1,ln)+lc2;
         ln--;
      }
   } else {
      lc2 = lc;
   }
   return lc2;
}
