function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}
/*
 * MODIFIED: Doug Ballance 2/25/2008
 *
 * Facebox (for jQuery)
 * version: 1.0 (12/19/2007)
 * @requires jQuery v1.2 or later
 *
 *
 *
 * Examples at http://famspam.com/facebox/
 *
 * Licensed under the MIT:
 *   http://www.opensource.org/licenses/mit-license.php
 *
 * Copyright 2007 Chris Wanstrath [ chris@ozmm.org ]
 *
 * Usage:
 *  
 *  jQuery(document).ready(function() {
 *    jQuery('a[@rel*=facebox]').facebox() 
 *  })
 *
 *  <a href="#terms" rel="facebox">Terms</a>
 *    Loads the #terms div in the box
 *
 *  <a href="terms.html" rel="facebox">Terms</a>
 *    Loads the terms.html page in the box
 *
 *  <a href="terms.png" rel="facebox">Terms</a>
 *    Loads the terms.png image in the box
 *
 *
 *  You can also use it programmatically:
 * 
 *    jQuery.facebox('some html')
 *
 *  This will open a facebox with "some html" as the content.
 *    
 *    jQuery.facebox(function() { ajaxes })
 *
 *  This will show a loading screen before the passed function is called,
 *  allowing for a better ajax experience.
 *
 */
(function($) {
  $.facebox = function(data) {
    $.facebox.init()
    $.facebox.loading()
    $.isFunction(data) ? data.call() : $.facebox.reveal(data)
  }

  $.facebox.state = {open: false }
  
  $.facebox.settings = {
    loading_image : '/static/uidx-images/facebox/loading.gif',
    save_image   : '/static/uidx-images/facebox/savelabel.gif',
    close_image   : '/static/uidx-images/facebox/closelabel.gif',
    image_types   : [ 'png', 'jpg', 'jpeg', 'gif' ],
    facebox_html  : '\
  <div id="facebox" style="display:none;"> \
    <div class="popup"> \
      <table> \
        <tbody> \
          <tr> \
            <td class="tl"/><td class="b"/><td class="tr"/> \
          </tr> \
          <tr> \
            <td class="b"/> \
            <td class="body"> \
              <div class="content"> \
              </div> \
              <div class="message" style="display:none;"> \
              </div> \
              <div class="error" style="display:none;"> \
              </div> \
              <div class="footer"> \
                <a href="#" class="save" style="display:none;"> \
                  <img border="0" src="" title="save" class="save_image" /> \
                </a> \
                <a href="#" class="close"> \
                  <img border="0" src="" title="close" class="close_image" /> \
                </a> \
              </div> \
            </td> \
            <td class="b"/> \
          </tr> \
          <tr> \
            <td class="bl"/><td class="b"/><td class="br"/> \
          </tr> \
        </tbody> \
      </table> \
    </div> \
  </div>'
  }

  $.facebox.loading = function() {
    if ($('#facebox .loading').length == 1) return true
  	$.facebox.state.open=true;
    $('#facebox .content').empty()
    $('#facebox .body').children().hide().end().
      append('<div class="loading"><img src="'+$.facebox.settings.loading_image+'"/></div>')

    var pageScroll = $.facebox.getPageScroll()
    $('#facebox').css({
      top:	pageScroll[1] + ($.facebox.getPageHeight() / 10),
      left:	pageScroll[0]
    }).show()

    $(document).bind('keydown.facebox', function(e) {
      if (e.keyCode == 27) $.facebox.close()
    })
  }

  $.facebox.reveal = function(data, klass) {
    if (klass) $('#facebox .content').addClass(klass)
    $('#facebox .content').append(data)
    $('#facebox .loading').remove()
    $('#facebox .body').children().fadeIn('normal')
  }

  $.facebox.bind_save = function (callback) {
  	$('#facebox .save').unbind('click');
  	$('#facebox .save').click(callback);
	$('#facebox .save').show();
  }

  $.facebox.message = function (message) {
  	if ($.facebox.state.open == false) {
 		$.facebox();
 	}
	$('#facebox .message').append(message);
	$('#facebox .message').show();
  }

  $.facebox.error = function (error) {
  	if ($.facebox.state.open == false) {
 		$.facebox();
 	}
	$('#facebox .error').append(error);
	$('#facebox .error').show();
  }

  $.facebox.image = function (image_url) {
    $.facebox.loading(true)
    var image = new Image()
    image.onload = function() {
	    $.facebox.reveal('<div class="image"><img src="' + image.src + '" /></div>')
    }
    image.src = image_url;
  }

  $.facebox.close = function() {
    $(document).unbind('keydown.facebox');
    $('#facebox').hide();
    $('#facebox .content').removeClass().addClass('content');
  	$('#facebox .save').unbind('click');
	$('#facebox .save').hide();
	$('#facebox .message')[0].innerHTML = '';
 	$('#facebox .message').hide();
	$('#facebox .error')[0].innerHTML = '';
 	$('#facebox .error').hide();
    $.facebox.state.open=false;
    return false
  }
  

  $.fn.facebox = function() {
    $.facebox.init();

    var image_types = $.facebox.settings.image_types.join('|')
    image_types = new RegExp('\.' + image_types + '$', 'i')

    function click_handler() {
      $.facebox.loading(true)

      // support for rel="facebox[.inline_popup]" syntax, to add a class
      var klass = this.rel.match(/facebox\[\.(\w+)\]/)
      if (klass) klass = klass[1]

      // div
      if (this.href.match(/#/)) {
        var url    = window.location.href.split('#')[0]
        var target = this.href.replace(url,'')
        $.facebox.reveal($(target).clone().show(), klass)

      // image
      } else if (this.href.match(image_types)) {
        var image = new Image()
        image.onload = function() {
          $.facebox.reveal('<div class="image"><img src="' + image.src + '" /></div>', klass)
        }
        image.src = this.href

      // ajax
      } else {
        $.get(this.href, function(data) { $.facebox.reveal(data, klass) })
      }

      return false
    }

    this.click(click_handler)
    return this
  }

  $.facebox.init = function() {
    if ($.facebox.settings.inited) {
      return true
    } else {
      $.facebox.state.open=false;
      $.facebox.settings.inited = true;
    }

    $('body').append($.facebox.settings.facebox_html)

    var preload = [ new Image(), new Image(), new Image() ]
    preload[0].src = $.facebox.settings.close_image
    preload[1].src = $.facebox.settings.loading_image
    preload[2].src = $.facebox.settings.save_image
	/* 
    $('#facebox').find('.b:first, .bl, .br, .tl, .tr').each(function() {
      preload.push(new Image())
      preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1')
    })
 	*/
    $('#facebox .close').click($.facebox.close)
    $('#facebox .close_image').attr('src', $.facebox.settings.close_image)
    $('#facebox .save_image').attr('src', $.facebox.settings.save_image)
  }

  // getPageScroll() by quirksmode.com
  $.facebox.getPageScroll = function() {
    var xScroll, yScroll;
    if (self.pageYOffset) {
      yScroll = self.pageYOffset;
      xScroll = self.pageXOffset;
    } else if (document.documentElement && document.documentElement.scrollTop) {	 // Explorer 6 Strict
      yScroll = document.documentElement.scrollTop;
      xScroll = document.documentElement.scrollLeft;
    } else if (document.body) {// all other Explorers
      yScroll = document.body.scrollTop;
      xScroll = document.body.scrollLeft;	
    }
    return new Array(xScroll,yScroll) 
  }

  // adapter from getPageSize() by quirksmode.com
  $.facebox.getPageHeight = function() {
    var windowHeight
    if (self.innerHeight) {	// all except Explorer
      windowHeight = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
      windowHeight = document.documentElement.clientHeight;
    } else if (document.body) { // other Explorers
      windowHeight = document.body.clientHeight;
    }	
    return windowHeight
  }
})(jQuery);



/* Simple Gallery Script 
 * <a onclick="return showPic(this)" href="images/bananas.jpg" 
 * title="A bunch of bananas on a table">some bananas</a>
 * <img id='placeholder'>
 */

UIDX_TYPE_VALUES={};
function search_form_toggle_types(val_types) {
    $(".uidx_form_element").attr("disabled",true);
    $('input:checkbox[@name=type]:checked').each(function(){
        var val_id = $(this).val();
        $("."+val_types[val_id]).attr("disabled",false);
    });
    $('input:checkbox[@name=type]').attr("disabled",false);
}

function bind_search_form_toggle_types() {
    $('#uidx_proptype .uidx_search_maintype').each(function() {
        $(this).click(function() {
            search_form_toggle_types(UIDX_TYPE_VALUES);
        });
    });
   search_form_toggle_types(UIDX_TYPE_VALUES);
}
/* Moved to embedded 
function showPic (whichpic,id) {
 	if (document.getElementById) {
		document.getElementById(id).src = whichpic.href;
		return false;
	}
}
*/
function prep_emailer(linkid,msg){
	updatediv=$(linkid).attr('href');
	if (!msg) {
		$(updatediv).hide();
	}
	$(linkid).click(function(){
		$(updatediv).toggle();
		return false;
	});
}

function filter_to_currency(amount) {
        var i = parseFloat(amount);
        if(isNaN(i)) { i = 0.00; }
        var minus = '';
        if(i < 0) { minus = '-'; }
        i = Math.abs(i);
        i = parseInt((i + .005) * 100);
        i = i / 100;
        s = new String(i);
        if(s.indexOf('.') < 0) { s += '.00'; }
        if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
        s = minus + s;
        return s;
}
function filter_to_numeric(val) {
	var i;
	ok='1234567890.';
	numstr='';
	for (i=0; i < val.length; i++) {
		c= val.charAt(i)
		if (ok.indexOf(c) != -1) numstr += c
	}
	if (numstr)	return numstr
	else return 0
}

function mort_calc(LoanAmount,DownPercent,InterestRate,Years,Taxes) {
	AnnualInterestRate = InterestRate/100;
	DownPayment = (DownPercent/100) * LoanAmount 
	MonthRate=AnnualInterestRate/12; 
	NumPayments=Years*12; 
	Prin=LoanAmount-DownPayment; 
	MonthlyTaxes = Taxes/12;
	MonthPayment=Math.floor((Prin*MonthRate)/(1-Math.pow((1+MonthRate),(-1*NumPayments)))*100)/100; 
	return filter_to_currency(MonthPayment + MonthlyTaxes);
} 


function mort_calc_form(submit) {
	rate =	filter_to_numeric(submit.form.mort_rate.value);
	years = filter_to_numeric(submit.form.mort_duration.value);
	down = filter_to_numeric(submit.form.mort_down.value);
	price = filter_to_numeric(submit.form.mort_price.value);
	taxes= filter_to_numeric(submit.form.mort_taxes.value);
	monthly = mort_calc(price,down,rate,years,taxes);
	$(".uidx_mort_payment").html('[$'+monthly+' monthly est]');
	return false;
}

function facebox_mort_calc() {
	var fhtml=$('.uidx_mortgage_calc_container').html();
	$.facebox("<form name='facebox_mort_calc_form' id='facebox_mort_calc_form'>" + fhtml +"</form>")
	$('#facebox .uidx_mort_calculate').click(function(){mort_calc_form(this); return false;});
}

var SPEEDTRAP = new Array(); 
function slowdown(name) {
    setTimeout('remove_slowdown("'+name+'")',2500);
    if (!SPEEDTRAP[name]) { SPEEDTRAP[name] = 0; }
	SPEEDTRAP[name]= SPEEDTRAP[name]+1;		
}
 
function remove_slowdown(name) {
	SPEEDTRAP[name]=SPEEDTRAP[name]-1;	
}

function check_speed(name){
	if (SPEEDTRAP[name] > 0) {
		slowdown(name); 
		return true; 
	}
	return false;
}

function save_listing(id,save_text,saved_text,save_image,saved_image) {
	if (check_speed('save_listing')==true) {
		return false; 
	} 
    var ran_num=Math.floor(Math.random()*99999);
	text = '#uidx_save_listing_text_' + id
	image = '#uidx_save_listing_img_' + id
	link = '#uidx_save_listing_link_' + id
    $.ajax({ type: "GET",
        url: $(link).attr('href'),
        data: "dummyload=" + ran_num ,  //random number to keep page from caching
        dataType: "json",
        error:  function(msg) { alert(msg); },
        success: function(json){ // If we get nothing valid, do nothing.  Otherwise load from tobj
            if (json.saved){
				$(text).html(saved_text)	 
				$(image).attr('src',saved_image)	 
            }
            else {
				$(text).html(save_text)	 
				$(image).attr('src',save_image)	 
            }
        }
        
    });
	slowdown('save_listing');
}
