/* Common */
// default helpers
var o = false;
var s = "";
var d = false;

/* Image Pre Load */
(function($) {
  var cache = [];
  // Arguments are image paths relative to the current page.
  $.preLoadImages = function() {
    var args_len = arguments.length;
    for (var i = args_len; i--;) {
      var cacheImage = document.createElement('img');
      cacheImage.src = arguments[i];
      cache.push(cacheImage);
    }
  }
})(jQuery);

(function($) {
  jQuery.fn.backgroundPosition = function() {
    var p = $(this).css('background-position');
    if(typeof(p) === 'undefined') return $(this).css('background-position-x') + ' ' + $(this).css('background-position-y');
    else return p;
  };
})(jQuery);

function getUserSummary() {
    $.ajax({
        url: site_url+'services/user_summary/',
        dataType: "html",
        success: function(data) {
            $('#user_summary').html(data);
        }
    });
}

function switchBasicSearch(rel) {
    switch(rel) {
        case "suburb": s = "Enter suburbs or postcodes (eg: Croydon or 3136)";
        $('p.search_by').show();
        break;
    
        case "urban": s = "Enter street (eg: Main Street)";
        $('p.search_by').hide();
        break;
    
        case "region" : s = "Enter state regions";
        $('p.search_by').hide();
        break;
    
        case "subregion" : s = "Enter State Regions (eg: VIC Mornington Pennisular)";
        $('p.search_by').hide();
        break;
        
        case "local_gov" : s = "Enter Municipality (eg: NSW Botany Bay)";
        $('p.search_by').hide();
        break;
    
        case "map" : s = "Use the Map to search";
        $('p.search_by').hide();
        break;
        
        default: break;
    }
    return true;
}
$(document).ready(function() {
    
	$('#search_form select, #advanced_search select').customStyle();
	$('#search_form select, #advanced_search select').css('margin-left','0');
    
    // buttons
	var bgp = false;
	var bg = false;
    var bgp = false;
	var bg = false;
	$('.button').hover(function() {
		bg = $(this).backgroundPosition();
		bg = bg.split(' ');
		bgp = bg[0].replace('px','');
        
        cls = $(this).attr('class').split(' ');

        var width;
        switch(cls[1]) {
            case "button_enquire" :
            case "button_feature_details":
            width = 195;
            break;
            case "button_login" :
            width = 160 ;
            break;
            default: width = 175; break;
        }
       
		$(this).css('background-position',-(width)+'px '+bg[1]);
		$(this).css('cursor','pointer');
	},function() {
		$(this).css('background-position',bgp+'px '+bg[1]);
	});
	        
    // auto complete
    $('input[name="sub_search"]').autocomplete(site_url+"services/locations/",
    {
        delay:5,
        max:25,
        scrollHeight:300,
        minChars:2,
        matchSubset:1,
        matchContains:1,
        cacheLength:50,
        multiple: true,
        multipleSeparator: " & ",
        selectOnly:true,
        extraParams: { search_by: function() {
                $('input[name="sub_search"]').unbind('focus');
                $('input[name="sub_search"]').unbind('blur');
                return $('input[name="search_by"]').val();
            }
        }
    });
        
    // login error
    $("#form_login").validate({
        errorLabelContainer: $("#form_login #error"),
        rules: {
                email_address: { required: true },
                password: { required: true }
            },
		messages: {
			email_address: "Please enter your email address",
			password: "Please enter your password"
		}
    });
    
    // save email alerts
    $('#save_alert').click(function() {
        $('#user_summary').html('<img src="graphics/common/icon-loading.gif" />');
        var rel = $(this).attr('rel');
        $.ajax({
        url: site_url+'services/save_alert/'+rel,
            success: function() {
                getUserSummary();
            }
        });
    });
    
     // save search
    $('#save_search').click(function() {
        $('#user_summary').html('<img src="graphics/common/icon-loading.gif" />');
        $.ajax({
        url: site_url+'services/save_search/',
            success: function() {
                getUserSummary();
            }
        });
    });
        
    // track email alerts
    $('#create_alerts').click(function() {
        $.post(site_url+"services/save_alerts", $("#alerts_form").serialize(),function(data) {
            $.each($('input[name="email_alert"]'), function() {
                $(this).attr('checked','');
            });
            $.fn.colorbox.close();
            getUserSummary();
        });
    });
   
    $('#search_by ul li a').bind('click',function() {
      
        !o ? o = $(this).val() : false;
        $('#search_by ul li').removeClass('active');
        $(this).parent().addClass('active');
        var rel = $(this).attr('rel');
       
        switchBasicSearch(rel);
        
        $('input[name="search_by"]').val(rel);
        $('input[name="sub_search"]').unbind('focus');
        $('input[name="sub_search"]').unbind('blur');
        
        if($(this+':checked').val() != search_by) {
          
            $('input[name="sub_search"]').val(s);
            $('input[name="sub_search"]').focus(function() {
                $(this).val('');
            });
            $('input[name="sub_search"]').blur(function() {
                $(this).val(s);
            });
        }
        else
            $('input[name="sub_search"]').val(o);
    });
    
    $('#search_area form').bind('submit',function() {
        if($('input[name="sub_search"]').val() == s) {
            $('#system').html('<div class="error">Please enter your search criteria</div>');
            return false;
        } else
            return true;
    });
    
    // focus
    $('input[name="sub_search"], input[name="agent_suburb"]').focus(function() {
  
        var len = $(this).val().length;
        var lc = $(this).val().substr(len-2,1);

        if(lc != "&" && len > 2) 
            $(this).val($(this).val() + " & ");
    });
    
    // blur
    
    $('input[name="sub_search"], input[name="agent_suburb"]').blur(function() {
        var len = $(this).val().length;
        var lc = $(this).val().substr(len-2,1);
        if(lc == "&") {
            lc = $(this).val().substr(0,($(this).val().length-3));
           $(this).val(lc);
        }    
    });

    // new search
    $('#clear_search').click(function() {
        $('input[name="sub_search"]').val('').focus();
    });
    
    // track mobiles and phones via ajax            
    $('.click_phone, .click_mobile').click(function() {
        var e = $(this);
        var type = $(this).attr('class');
        if(type) {
            var rel = $(this).attr('rel').split('|');
            var enc = $(this).next().html();
             $.ajax({
                url: '/services/track_phone/'+enc+'/'+type+'/'+rel[0]+'/'+rel[1],
                success: function(data) {
                    $(e).removeClass(type);
                    $(e).html(data);
                }
            });
        }
    });
    
    $("table.zebra tr:odd").addClass("zebra_odd");
    
    var advt = false;
    var advtf = false;
    
    $(".adv_search").bind('click',function() {
        
        // first run
        if(!advtf) {
            $('#advanced_search').css('display','none');
            $('#advanced_search').css('visibility','visible');
            advtf = true;
        }
            
        if(!advt) {
       
            $('#advanced_search').fadeIn('fast');
            $('.adv_search_button').addClass('active');
            $('input[name="search"]').attr('name','adv_search');
            $('#adv_search').text('- ADVANCED SEARCH');
            advt = true;
            
        } else {
            $('#advanced_search').fadeOut('fast');
            $('.adv_search_button').removeClass('active');
            $('input[name="adv_search"]').attr('name','search');
             $('#adv_search').text('+ ADVANCED SEARCH');
            advt = false;
        }
    });
    
    $('p.search_by :checkbox, #advanced_search :checkbox').simpleImageCheck({
        image: '/graphics/common/icon-cb-unchecked.gif',
        imageChecked: '/graphics/common/icon-cb-checked.gif'
    });

    // first run
    getUserSummary();
    
    // switch text
    if(!$('input[name="sub_search"]').val()) {
        $('#search_by ul li a:first').trigger('click');
    }
    
    if($('#search_by ul li.active a').attr('rel') == "suburb") {
        $('p.search_by').show();
    }

    
    // highligh search tab
    $('#'+search_tab).addClass('active');
});

/**
 * Function : dump()
 * Arguments: The data - array,hash(associative array),object
 *    The level - OPTIONAL
 * Returns  : The textual representation of the array.
 * This function was inspired by the print_r function of PHP.
 * This will accept some data as the argument and return a
 * text that will be a more readable version of the
 * array/hash/object that is given.
 * Docs: http://www.openjs.com/scripts/others/dump_function_php_print_r.php
 */
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;
}
