/**
 * Number.prototype.format (c, d, t)
 *  - c, count after decimal
 *  - d, decimal separater
 *  - t, thousands separater
 * Example: (10000).format(2, '.', ','); // 10,000.00
 */
Number.prototype.format = function(c, d, t){
    var n = this, c = isNaN(c = Math.abs(c)) ? 0 : c, d = d == undefined ? '.' : d, t = t == undefined ? ',' : t, s = n < 0 ? '-' : '', i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + '', j = (j = i.length) > 3 ? j % 3 : 0;
    return s + (j ? i.substr(0, j) + t : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : '');
};

/**
 * Set Cookie
 * @param name
 * @param value
 * @param expires
 * @return
 */
var rew_setCookie = function (name, value, expires) {
    if (typeof(expires) == 'undefined') {
        var exp = new Date(); //set new date object
        exp.setTime(exp.getTime() + (1000 * 60 * 60 * 24 * 30)); //set it 30 days ahead
    }
    document.cookie = name + "=" + escape(value) + "; path=/" + ((expires == null) ? "" : "; expires=" + expires.toGMTString());
};

/**
 * Get Cookie
 * @param c_name
 * @return
 */
var rew_getCookie = function (c_name) {
    if (document.cookie.length > 0) {
        c_start = document.cookie.indexOf(c_name + "=");
        if (c_start != -1) {
            c_start = c_start + c_name.length + 1;
            c_end = document.cookie.indexOf(";", c_start);
            if (c_end == -1) c_end = document.cookie.length;
            return unescape(document.cookie.substring(c_start, c_end));
        }
    }
    return "";
};

/**
 * Open Facebox Iframe
 * @param href
 * @return
 */
var openPage = function openPage (href) {
    closeFacebox();
    $.facebox({'iframe' : href});
};

/**
 * Close Facebox
 * @return
 */
var closeFacebox = function () {
    $(document).trigger('close.facebox');
};

/**
 * Re-Load User Search Tools
 * @return
 */
var reloadUserTools = function () {
    $.ajax({
        'url' : '?',
        'success' : function (data) {
            var data = $('#login', data).html();
            if (typeof(data) != 'undefined') {
                $('#login', window.parent.document.body).html(data);
                if (typeof(Cufon) != 'undefined') Cufon.refresh();
            }
        }
    });
};

/**
 * Bookmarking IDX Listing
 * @param mls_number
 * @param container
 * @return
 */
var bookmarkListing = function (mls_number, container) {

    /* POST HTTP Request, Expect JSON */
    $.ajax({
        'url'      : '/idx/inc/php/ajax/json.php?bookmarkListing',
        'type'     : 'POST',
        'dataType' : 'json',
        'data'     : {
            'mls_number' : mls_number
        },
        'error'    : function (XMLHttpRequest, textStatus, errorThrown) {
            alert('An error has occurred. Listing could not be saved.');
            return;
        },
        'success'  : function (json, textStatus) {

            /* Return Code */
            if (json.returnCode == 200) {

                /* Success - Saved */
                if (json.added) $(container).addClass('saved');

                /* Success - Removed */
                if (json.removed) $(container).removeClass('saved');

                /* reload favs menu */
                $('#favs-menu').load('/idx/inc/php/ajax/favourites.php', function () {
                    $(this).addClass('loaded');
                });

            } else {

                /* Require Registration */
                if (json.register) {

                    /* Registration Form Overlay */
                    openPage(json.register);

                } else {

                    /* Error Occurred */
                    alert('An error has occurred. Listing could not be saved.');

                }
            }
            return;
        }
    });

};

/**
 * Save IDX Search
 * @param search
 * @return
 */
var saveSearch = function (search) {

    /* Search Object */
    search = search ? search : {};

    /* Create Container */
    var content  = $('<div />', {
        'id'  : 'save-search'
    });

    /* Create Container */
    var message  = $('<div />', {
        'class'  : 'response'
    });

    /* Create Form */
    var form  = $('<form />', {
        'class'  : 'rewfw',
        'autocomplete' : 'off'
    });
    
    /* Default Title? */
    var search_title = search.search_title ? search.search_title : search.save_prompt;

    /* Search Title */
    var input_text = $('<input />', {
        type  : 'text',
        name  : 'search_title',
        value : (search_title != '') ? search_title : 'My Saved Search'
    });
    
    /* Search Frequency */
    var frequency = [], freq = search.frequency ? search.frequency : 'weekly';
    frequency.push('<select name="frequency">');
	frequency.push('<option value="daily"' + (freq == 'daily' ? ' selected' : '') + '>Daily</option>');
	frequency.push('<option value="weekly"' + (freq == 'weekly' ? ' selected' : '') + '>Weekly</option>');
	frequency.push('<option value="monthly"' + (freq == 'monthly' ? ' selected' : '') + '>Monthly</option>');
    frequency.push('</select>');
    frequency = $(frequency.join("\n"));

    /* Wrap Form */
    form.wrapInner('<div class="form-wrap"><fieldset><ul></ul></fieldset><div class="buttonset"><button type="submit" name="search" value="Save Search" class="rewbtn primary"><b><i>Save Search</i></b></button></div></div>');

    /* Add Input to Form */
    form.find('ul').append(input_text);
    
    /* Add Select to Form */
    form.find('ul').append(frequency);

    /* Wrap Form Inputs */
    input_text.wrap('<span class="input-wrap" />').wrap('<li><div class="field rpd-gridcolx6"><span class="field-iwrap"><label>Search Title</label></span></div></li>');
    
    /* Wrap Select Inputs */
    frequency.wrap('<span class="input-wrap" />').wrap('<li><div class="field rpd-gridcolx2"><span class="field-iwrap"><label>Frequency</label></span></div></li>');

    /* Container Content */
    content.append(message).append(form);

    /* Form Submit Event */
    form.bind('submit', function () {

        /* Reset Message */
        message.html('');

        /* Search Title */
        var search_title = $(this).find('input[name="search_title"]').val();

        /* Set Search Title */
        search.search_title = search_title;
        
        /* Set Search Frequency */
        search.frequency = $(this).find('select[name="frequency"]').val();

        /* Save Search Action */
        search.save_search = true;

        /* AJAX Request */
        $.ajax({
            'url'      : '/idx/inc/php/ajax/json.php?saveSearch',
            'type'     : 'POST',
            'dataType' : 'json',
            'data'     : search,
            'error'    : function (XMLHttpRequest, textStatus, errorThrown) {
                //alert('AJAX Error');
            },
            'success'  : function (json, textStatus) {
                if (typeof(json) == 'undefined' || !json) return;
                if (json.success) {
                    if (search.create_search && search.lead_id) {
                        window.location = '/backend/leads/lead/searches/?id=' + search.lead_id;
                    } else {
                        $(document).trigger('close.facebox');
                        if (json.search) {
                            $('#results-message').html('<p>You are viewing your <strong>"' + search.search_title + '"</strong> saved search. <a href="?edit_search=true&saved_search_id=' + json.search + '">Edit this Search</a></p>');
                        }
                    }
                } else {
                    if (json.error) message.html('<div class="msg errors"><h5 class="title">Oops, There was an Error with your Form Submission!</h5><ul><li>' + json.error + '</li></ul></div>');
                    if (json.redirect) {
                        openPage(json.redirect);
                    }
                }
            }
        });

        /* Return */
        return false;

    });

    /* Trigger Submit */
    if (search.trigger) {
        form.trigger('submit');
    }

    /* Load Facebox */
    $.facebox({
        title : 'Save this Search',
        data : content
    });

    /* Return */
    return;

};

/**
 * Edit IDX Search
 * @param search
 * @return
 */
var editSearch = function (search) {

    /* Search Object */
    search = search ? search : {};

    /* AJAX Request */
    $.ajax({
        'url'      : '/idx/inc/php/ajax/json.php?editSearch',
        'type'     : 'POST',
        'dataType' : 'json',
        'data'     : search,
        'success'  : function (json, textStatus) {
            if (typeof(json) == 'undefined' || !json) return;
            if (json.success) {
                if (search.edit_search && search.lead_id) {
                    window.location = '/backend/leads/lead/searches/?id=' + search.lead_id;
                } else if (search.saved_search_id && search.search_by == 'map') {
                    window.location = '/idx/map/' + search.saved_search_id + '/';
                } else if (search.saved_search_id) {
                    window.location = '/idx/search/' + search.saved_search_id + '/';
                }
            } else if (json.error) {
                alert(json.error);
            }
        }
    });

    /* Return */
    return;

};
