﻿$.ajaxSetup({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    data: "{}",
    dataType: "json",
    dataFilter: function (data) {
        var msg;
        if (typeof (JSON) !== 'undefined' && typeof (JSON.parse) === 'function')
            msg = JSON.parse(data);
        else
            msg = eval('(' + data + ')');        
        return msg;
    }
});

/*
function that can be passed as second argument to JSON.parse to sort out .NET date times
function jsonDateReviver(k, v) {
var dateNet = /\/Date\((\d+)(?:-\d+)?\)\//i;
var dateISO = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:[.,]\d+)?Z/i;

if (typeof v === 'string') {
if (dateNet.test(v))
return Date(parseInt(dateNet.exec(v)[1], 10));
if(dateI.test(v))
return Date(value);
}
return v;
}*/

/*
Add CountAndClean event handlers
*/
function InitCountAndClean(textSelector, charSelector, smsSelector, maxLength) {
    if (!maxLength)
        maxLength = 459;
    $(textSelector).keyup(function() {
        CountAndClean(textSelector, charSelector, smsSelector, maxLength);
    });
    CountAndClean(textSelector, charSelector, smsSelector, maxLength);
}
/* 
Count SMS Characters and clean out invalid characters
*/
function CountAndClean(textSelector, charSelector, smsSelector, maxLength) {
    if(!maxLength)
        maxLength = 459;
    var doubleCount = 0;
    var newLineCount = 0;
    var length = 0;
    var msgText = $(textSelector).val();
    var doubleReg = /\[|\]|\{|\}|€|\\|~|\||\f|\^/g;
    var gsmReg = /[^@£$¥èéùìòÇç\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !""#¤%&'()*+,-.\/:;<=>?¡ÄÖÑÜ§¿äöñüà€\f\[\]^{|}\\~a-zA-Z0-9\u00A0]/g;
    var replaceOld = new Array(/“/g, /”/g, /‘/g, /’/g, /–/g, /…/g, /¦/g, /`/g);
    var replaceNew = new Array('"', '"', '\'', '\'', '-', "...", '|', '\'');
    var origMsgText = msgText;
    var smsCount = 1;
    var remaining = 459;
    if (msgText == null)
        return;

    /* Substitue none GSM characters used by word */
    for (keyVar in replaceOld) {
        msgText = msgText.replace(replaceOld[keyVar], replaceNew[keyVar]);
    }
    /* Replace none GSM characters */
    msgText = msgText.replace(gsmReg, '');
    if (msgText != origMsgText)
        $(textSelector).val(msgText);
    length = msgText.length;
    /* Count double byte characters*/
    var matches = msgText.match(doubleReg);
    if (matches != null) {
        length = length + matches.length;
        doubleCount = matches.length;
    }
    /* Count windows style new lines */
    matches = msgText.match(/\r/g);
    if (matches != null)
        newLineCount = matches.length;
    length -= newLineCount;
    if (length > maxLength) {
        $(textSelector).val(msgText.substr(0, (maxLength - doubleCount)));
        remaining = 0;
    }
    else
        remaining = maxLength - length;
    if (length > 306)
        smsCount = 3;
    else if (length > 160)
        smsCount = 2;
    $(charSelector).text(remaining);
    if (smsSelector) {
        if (smsCount > 1) {
            $(smsSelector).text(smsCount + ' SMS credits per recipient');
            $(smsSelector).css('font-weight', 'bold');
            $(smsSelector).css('color', '#FF6A00');
        } else {
            $(smsSelector).text(smsCount + ' SMS credit per recipient');
            $(smsSelector).css('font-weight', 'normal');
            $(smsSelector).css('color','#333');
        }        
    }
}

function insertAtCursor(fieldId, myValue) {
    var myField = document.getElementById(fieldId);
    //IE support
    if (document.selection) {
        myField.focus();
        sel = document.selection.createRange();
        sel.text = myValue;
    }
    //Mozilla support
    else if (myField.selectionStart || myField.selectionStart == 0) {
        var startPos = myField.selectionStart;
        var endPos = myField.selectionEnd;
        myField.value = myField.value.substring(0, startPos)
                + myValue
                + myField.value.substring(endPos, myField.value.length);
    }
    else {
        myField.value += myValue;
    }
}

function SelectAllCheckboxes(spanChk) {
    // Added as ASPX uses SPAN for checkbox
    var oItem = spanChk.children;
    var theBox = (spanChk.type == "checkbox") ?
        spanChk : spanChk.children.item[0];
    xState = theBox.checked;
    elm = theBox.form.elements;

    for (i = 0; i < elm.length; i++)
        if (elm[i].type == "checkbox" &&
              elm[i].id != theBox.id) {
        if (elm[i].checked != xState)
            elm[i].click();
    }
}

function DeleteConfirm(message) {
    return confirm(message);
}

function FormatPhoneNumber(number) {
    // UK
    if ((number.length == 12 && number.substring(0, 2) == "44") || (number.length == 11 && number.substring(0, 1) == "0")) {
        if (number.substring(0, 2) == "44")
            number = number.substring(2, number.length);
        else
            number = number.substring(1, number.length);

        // 01X1 e.g. 0161 123 4567
        if (number.match(/^1\d1\d{7}$/))
            return number.replace(/^(\d{3})(\d{3})(\d{4})$/, "0$1 $2 $3");
        //011
        if (number.match(/^11\d{8}$/))
            return number.replace(/^(\d{3})(\d{3})(\d{3})$/, "0$1 $2 $3");
        //02
        if (number.match(/^2\d{9}$/))
            return number.replace(/^(\d{2})(\d{4})(\d{4})$/, "0$1 $2 $3");
        //01 or 07 e.g. 01625 123 456 or 07123 456 789
        if (number.match(/^(1|7)\d{9}$/))
            return number.replace(/^(\d{4})(\d{3})(\d{3})$/, "0$1 $2 $3");
        //03, 08 or 09 e.g. 0845 050 0000 or 0906 123 4567
        if (number.match(/^(3|8|9)\d{9}$/))
            return number.replace(/^(\d{3})(\d{3})(\d{4})$/, "0$1 $2 $3");

        return "0" + number;
    } // International
    else if (number.substring(0, 1) != "0") {
        if(number.match(/^1(\d+)$/))
            return number.replace(/^1(\d+)$/, "+1 $1");

        if (number.match(/^2[07]\d+$/)) // Africa 2 digit
            return number.replace(/^(\d{2})(\d+)$/, "+$1 $2");
        if (number.match(/^2\d+$/)) // Africa 3 digit
            return number.replace(/^(\d{3})(\d+)$/, "+$1 $2");

        if (number.match(/^3[578]\d+$/)) // Europe 3 digit (3)
            return number.replace(/^(\d{3})(\d+)$/, "+$1 $2");
        if (number.match(/^3\d+$/)) // Europe 2 digit (3)
            return number.replace(/^(\d{2})(\d+)$/, "+$1 $2");

        if (number.match(/^4[2]\d+$/)) // Europe 3 digit (4)
            return number.replace(/^(\d{3})(\d+)$/, "+$1 $2");
        if (number.match(/^4\d+]$/)) // Europe 2 digit (4)
            return number.replace(/^(\d{2})(\d+)$/, "+$1 $2");

        if (number.match(/^5[09]\d+$/)) // Latin America 3 digit
            return number.replace(/^(\d{3})(\d+)$/, "+$1 $2");
        if (number.match(/^5\d+$/)) // Latin America 2 digit
            return number.replace(/^(\d{2})(\d+)$/, "+$1 $2");

        if (number.match(/^6[789]\d+$/)) // SE Asia & Oceania 3 digit
            return number.replace(/^(\d{3})(\d+)$/, "+$1 $2");
        if (number.match(/^6\d+$/)) // SE Asia & Oceania 2 digit
            return number.replace(/^(\d{2})(\d+)$/, "+$1 $2");

        if (number.match(/^7\d+$/)) // Russia 1 digit
            return number.replace(/^(\d{1})(\d+)$/, "+$1 $2");

        if (number.match(/^8[124]\d+$/)) // E Asia & Special 2 digit
            return number.replace(/^(\d{2})(\d+)$/, "+$1 $2");
        if (number.match(/^8\d+$/)) // E Asia & Special 3 digit
            return number.replace(/^(\d{3})(\d+)$/, "+$1 $2");
    } 
    return number;    
}

/* Payment button tracking */
$('#SagePay').click(function () {
    _gaq.push(['_trackEvent', 'Shop', 'Payment Method', 'Sagepay']);
    return true;
});
$('#PayPal').click(function () {
    _gaq.push(['_trackEvent', 'Shop', 'Payment Method', 'Paypal']);
    return true;
});
$('#GoogleCheckout').click(function () {
    _gaq.push(['_trackEvent', 'Shop', 'Payment Method', 'Google Checkout']);
    return true;
});
