﻿var Util = {
    jsonRequest: function (url, data, successCallback, failureCallback) {
        $.post(url, data, function (data, success) {
            if (data.Success) {
                if (successCallback) {
                    successCallback(data);
                }
            } else {
                if (failureCallback) {
                    failureCallback(data);
                } else {
                    alert(data.Error);
                }
            }
        }, 'json');
    },

    BoldSubstring: function (targetString, substring) {
        if (!targetString || !substring)
            return targetString;

        var targetStringBolded = targetString;
        var indexOfSubstring = targetString.toLowerCase().indexOf(substring.toLowerCase());

        if (indexOfSubstring >= 0) {
            var boldedSubstring = '<strong>' + targetString.substr(indexOfSubstring, substring.length) + '</strong>';
            targetStringBolded = targetString.substr(0, indexOfSubstring) + boldedSubstring + targetString.substr(indexOfSubstring + substring.length)
        }

        return targetStringBolded;
    },

    isIPad: function () {
        return (navigator.userAgent.match(/iPad/i) != null);
    },

    isIE7: function () {
        return (navigator.userAgent.match(/MSIE 7\.0/i) != null);
    },

    getGoogStreet1: function(res) {
        var subPremise = Util.getAddrComponent(res, 'subpremise');
        var streetNo = Util.getAddrComponent(res, 'street_number');
        var street1 = Util.getAddrComponent(res, 'route');
        if(street1 == null)
            street1 = "";
        if(streetNo != null)
            street1 = streetNo + ' ' + street1;
        if(subPremise != null)
            street1 = subPremise + '/' + street1;
        return street1;
    },

    getGoogSuburb: function(res) {
        var suburb = Util.getAddrComponent(res, 'locality');
        var state = getStateAbbrev(Util.getAddrComponent(res, 'administrative_area_level_1'));
        var postcode = Util.getAddrComponent(res, 'postal_code');
        var str = suburb;
        if(str != null)
            str += ", ";
        else
            str = "";
        if(state != null)
            str += state + " ";
        if(postcode != null)
            str += postcode;
        return str;
    },

    getAddrComponent: function(res, component) {
        for(var i=0;i<res.address_components.length;i++) {
            for(var j=0;j<res.address_components[i].types.length;j++) {
                if(res.address_components[i].types[j] == component)
                    return res.address_components[i].short_name;
            }
        }
        return null;
    },

    replaceAll: function (text, target, replacement) {
        return text.replace(new RegExp(target, 'g'), replacement);
    }
}


var Billing = {
    click: function (businessRecordId, searchResultId, callback) {
        Billing.trackEvent('Click', businessRecordId, sessionId, searchResultId, callback);
    },

    shareClick: function (businessRecordId, searchResultId, callback) {
        Billing.trackEvent('Click', businessRecordId, sessionId, searchResultId, callback);
    },

    callClick: function (businessRecordId, searchResultId, callback) {
        Billing.trackEvent('Call', businessRecordId, sessionId, searchResultId, callback);
    },

    smsClick: function (businessRecordId, searchResultId, callback) {
        Billing.trackEvent('Sms', businessRecordId, sessionId, searchResultId, callback);
    },

    mobileClick: function (businessRecordId, searchResultId, callback) {
        Billing.trackEvent('MobileClick', businessRecordId, sessionId, searchResultId, callback);
    },

    trackEvent: function (type, businessRecordId, sessionId, searchResultId, callback) {
        // Intentionally ignoring search result id, as it is not used anymore
        var url = '/Report/Event/' + type + '/' + businessRecordId + '/' + sessionId;
        Util.jsonRequest(url, null, function () {
            if (callback)
                callback(true);
        }, function () {
            if (callback)
                callback(false);
        });
    }
}
