﻿

//var version = getInternetExplorerVersion();
//var isIE = version != -1;
//var ieVersion = version;

function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer')
    {
        var ua = navigator.userAgent;
        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat(RegExp.$1);
    }
    return rv;
}

var QT = new Object();




QT.Common =
{
    


    setAttribute: function (controls, attributeName, attributeValue)
    {
        if ($.isArray(controls))
        {
            for (var i = 0; i < controls.length; i++)
            {
                controls[i].attr(attributeName, attributeValue);
            }
        }
        else
        {
            controls.attr(attributeName, attributeValue);
        }
    },
    removeAttribute: function (controls, attributeName)
    {
        if ($.isArray(controls))
        {
            for (var i = 0; i < controls.length; i++)
            {
                controls[i].removeAttr(attributeName);
            }
        }
        else
        {
            controls.removeAttr(attributeName);
        }
    },
    showElement: function (targetElement, elementToShow, fade, callbackFunction)
    {
        elementToShow.appendTo(targetElement);

    },
    validateControls: function (aryControls, validator)
    {
        var self = this;
        var id = '';
        var valid = true;
        var invalidFound = false;

        if ($.isArray(aryControls))
        {
            for (var i = 0; i < aryControls.length; i++)
            {
                var ctrl = aryControls[i];
                id = '#' + ctrl.attr('id');
                valid = validator.element(id);
                if (!valid)
                {
                    invalidFound = true;
                    //break;
                }
            }
        }
        else
        {
            id = '#' + aryControls.attr('id');
            valid = validator.element(id);
            if (!valid)
            {
                invalidFound = true;
            }
        }

        if (invalidFound)
            return false;
        else
            return true;

    }
};

function Translator(text, destlang, targetControl, callbackFn)
{

    this.TargetControl = targetControl;
    this.Callback = callbackFn;
    this.SourceLang = '';
    this.SourceText = text;
    this.DestLang = destlang;
    this.TranslatedText = '';
    this.Confidence = 0;
    this.IsReliable = false;

    this.LanguageDetected = false;

    this.Translate = function (callback)
    {

        var self = this;
        self.Callback = callback;

        var scriptTag = $('<script></script>');
        scriptTag.attr('type', 'text/javascript');
        var sourceText;
        if (text == null)
            sourceText = util.urlEncode(self.SourceText);
        else
            sourceText = util.urlEncode(text);

        var source = 'https://www.googleapis.com/language/translate/v2?key=AIzaSyBycL03SpcNVGcG_0czwiNWJZYwa1ilLfA&callback=' + callback + '&target=' + self.DestLang + '&q=' + sourceText;
        scriptTag.attr('src', source);
        $('head').append(scriptTag);
    };
    this.TranslateCallback = function (result)
    {
        var self = this;
        var data = result.data;
        var translations = data.translations;
        var trans1 = translations[0].translatedText;
        var lang1 = translations[0].detectedSourceLanguage;

        self.TranslatedText = util.urlDecode(trans1);

        if (self.TargetControl != null)
        {
            self.TargetControl.val(self.TranslatedText);
        }
    };
    

    this.DetectLanguage = function (text)
    {
        var scriptTag = $('<script></script>');
        scriptTag.attr('type', 'text/javascript');
        var sourceText = util.urlEncode(text);
        var source = 'https://www.googleapis.com/language/translate/v2/detect?key=AIzaSyDgAVWeZ1BGdJFhMVq1AZzd19IdMVIX8m8&callback=Translator.prototype.DetectLanguageCallback&q=' + sourceText;
        $('head').append(scriptTag);
    };


}
Translator.prototype.DetectLanguageCallback = function (result)
{
    var self = this;
    var data = result.data;
    var detections = data.detections;
    var det1 = detections[0];
    var lang = det1[0].language;
    var isReliable = det1[0].isReliable;
    var confidence = det1[0].confidence;

    self.SourceLang = lang;
    self.LanguageDetected = true;
    self.isReliable = isReliable;
    self.Confidence = confidence;
};
//Translator.prototype.TranslateCallback = function (result)
//{
//    var self = this;
//    var data = result.data;
//    var translations = data.translations;
//    var trans1 = translations[0].translatedText;
//    var lang1 = translations[0].detectedSourceLanguage;

//    self.TranslatedText = util.urlDecode(trans1);

//    if (self.TargetControl != null)
//    {
//        self.TargetControl.val(self.TranslatedText);
//    }

//};






var util =
{
    init: function ()
    {
        var self = this;

        self.IEVersion = getInternetExplorerVersion();
        self.IsIE = self.IEVersion != -1;

        self.elCountryId = $('#ctl00_hdnCountryId');
        self.CountryId = self.elCountryId.val();

        self.elFormName = 'aspnetForm';
        self.elTimeZoneOffset = $('#ctl00_hdnClientTimezoneOffset');


        //Initialize
        self.getTimeZoneOffset();
    },

    localizeNumber: function (number, formatString)
    {
        var self = this;
        var formatter = 'us';
        switch (self.CountryId)
        {
            case '1':
                formatter = 'us';
                break;
            case '2':
            case '17':
                formatter = 'au';
                break;
            case '3':
                formatter = 'cn';
                break;
            case '4':
                formatter = 'gb';
                break;
            case '5':
                formatter = 'nl';
                break;
            case '6':
                formatter = 'be';
                break;
            case '7':
                formatter = 'fr';
                break;
            case '8':
                formatter = 'se';
                break;
            case '9':
                formatter = 'de';
                break;
            case '10':
                formatter = 'es';
                break;
            case '11':
                formatter = 'it';
                break;
            case '12':
            case '13':
                formatter = 'cn';
                break;
            case '14':
                formatter = 'ca';
                break;
            case '15':
                formatter = 'fi';
                break;
            case '16':
                formatter = 'no';
                break;
            default:
                formatter = 'us';
                break;
        }
        if (formatString == undefined)
            formatString = "#,###";

        var options = { format: formatString, locale: formatter };

        var retValue = jQuery.formatNumber(number, options);

        return retValue;

    },

    getTimeZoneOffset: function ()
    {
        var self = this;
        var dt = new Date();
        var tzo = -dt.getTimezoneOffset();
        self.elTimeZoneOffset.val(tzo);

        var cookieValue = getCookie('TzOffset');

        if (cookieValue != (tzo + ''))
        {
            deleteCookie('TzOffset');
            setCookie('TzOffset', tzo, 60 * 60 * 24 * 30 * 1000);
        }




    },

    googleTranslateDecode: function (str)
    {
        return str.replace(/&#39;/g, "'");
    },

    trim: function (str, chars)
    {
        return ltrim(rtrim(str, chars), chars);
    },
    lTrim: function ltrim(str, chars)
    {
        chars = chars || "\\s";
        return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
    },
    rTrim: function rtrim(str, chars)
    {
        chars = chars || "\\s";
        return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
    },
    encodeText: function (str)
    {
        var text = str.replace(/:/g, '[colon]');
        text = text.replace(/\|/g, '[pipe]');
        text = text.replace(/~/g, '[tilde]');
        text = text.replace(/\'/g, '[apos]');
        return text;
    },
    decodeText: function (str)
    {
        var text = str.replace(/\[colon\]/g, ':')
        text = text.replace(/\[pipe\]/g, '|');
        text = text.replace(/\[tilde\]/g, '~')
        text = text.replace(/\[apos]/g, '\'');
        text = text.replace(/\[break]/g, '\n');
        return text;
    },
    urlEncode: function (str)
    {
        var result = "";

        for (i = 0; i < str.length; i++)
        {
            if (str.charAt(i) == " ") result += "+";
            else result += str.charAt(i);
        }
        return escape(result);
        //document.form2.S2.value = escape(result);
    },

    urlDecode: function (str)
    {
        //	var result = "";

        var result = str.replace(/\+/g, " ");

        /*	
        for (i = 0; i< str.length; i++) {
        if (str.charAt(i) == "+") result += " ";
        else result += str.charAt(i);
        }
        */
        return unescape(result);
        //document.form2.S2.value = unescape(result);
    }
};
$(document).ready(function ()
{
    util.init();
});

function resizer()
{
    this.resizeDown = function (element, maxSize)
    {
        this.init(element);

        var textWidth = this.tester.width();
        if ((this.tester.width() - maxSize) <= 1)
            return;

        element.css('font-size', this.growTo(maxSize) + 'px');
        this.tester.remove();
    }

    this.resize = function (element, size)
    {
        this.init(element);
        element.css('font-size', this.growTo(size) + 'px');
        this.tester.remove();
    }

    this.init = function (element)
    {
        $('#resizeroo').remove();
        this.tester = element.clone();
        this.tester.css('display', 'none');
        this.tester.css('position', 'absolute');
        this.tester.css('height', 'auto');
        this.tester.css('width', 'auto');
        $('body').append(this.tester);
        //this.size = 1;
        //this.tester.css('font-size', this.size + 'px');
    }

    this.emitWidth = function ()
    {
        console.log(this.tester.width());
    }

    this.grow = function ()
    {
        this.size++;
        this.setSize();
    }

    this.setSize = function (size)
    {
        this.size = size;
        this.tester.css('font-size', this.size + 'px');
    }

    this.growTo = function (limit)
    {
        lower = 1;
        upper = limit - 1;

        // do binary search going midway to determine 
        // the best size
        while (lower < upper)
        {
            midpoint = Math.ceil((upper + lower) / 2);
            this.setSize(midpoint);

            if (Math.abs(limit - this.tester.width()) <= 1)
            {
                // close enough
                break
            }

            if (this.tester.width() >= limit)
            {
                upper = this.size - 1;
            }
            else
            {
                lower = this.size + 1;
            }
        }

        while (this.tester.width() > limit)
        {
            this.setSize(this.size - 1);
        }

        return (this.size);

    }
}


(function ($)
{
    $.fn.widthResize = function (pixels)
    {
        return this.each(function ()
        {
//            var settings = {
//                'width': 500
//            };
//            if (options)
//            {
//                $.extend(settings, options);
//            }
            r = new resizer();
            r.resize($(this), pixels);
        });
    };
    $.fn.widthShrink = function(maxPixelWidth)
    {
        return this.each(function()
        {
            r = new resizer();
            r.resizeDown($(this), maxPixelWidth);
        });
    };
})(jQuery);

function setCookie(cookieName, value, expireDays)
{
    if(expireDays == null || expireDays == '')
        $.cookie(cookieName, value, {path : '/'});
    else 
    {
        try
        {
            if(parseInt(expireDays) < 0)
                $.cookie(cookieName, value, {path : '/'});
            else
                $.cookie(cookieName, value, {expires: expireDays, path: '/'});
        }
        catch(err)
        {
            $.cookie(cookieName, value, {path : '/'});
        }
    }
}
function getCookie(cookieName)
{
    var x = $.cookie(cookieName);
    return x == null ? '' : x;
}

function deleteCookie(cookieName, expireDays)
{
    if (expires != null)
        $.cookie(cookieName, null, { expires: expireDays, path: '/' });
    else
        $.cookie(cookieName, null, { path: '/' });
}

//function getCookie(cookieName)
//{
//    var exp = new RegExp(escape(cookieName) + "=([^;]+)");
//    if (exp.test(document.cookie + ";"))
//    {
//        exp.exec(document.cookie + ";");
//        return unescape(RegExp.$1);
//    }
//    else return false;
//}
function deleteCookie(cookieName)
{
    if (getCookie(cookieName)) setCookie(cookieName, "Pending delete", -1000);
    return true;
}


function WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit)
{
    this.eventTarget = eventTarget;
    this.eventArgument = eventArgument;
    this.validation = validation;
    this.validationGroup = validationGroup;
    this.actionUrl = actionUrl;
    this.trackFocus = trackFocus;
    this.clientSubmit = clientSubmit;
}
function WebForm_DoPostBackWithOptions(options)
{
    var validationResult = true;
    if (options.validation)
    {
        if (typeof (Page_ClientValidate) == 'function')
        {
            validationResult = Page_ClientValidate(options.validationGroup);
        }
    }
    if (validationResult)
    {
        if ((typeof (options.actionUrl) != "undefined") && (options.actionUrl != null) && (options.actionUrl.length > 0))
        {
            theForm.action = options.actionUrl;
        }
        if (options.trackFocus)
        {
            var lastFocus = theForm.elements["__LASTFOCUS"];
            if ((typeof (lastFocus) != "undefined") && (lastFocus != null))
            {
                if (typeof (document.activeElement) == "undefined")
                {
                    lastFocus.value = options.eventTarget;
                }
                else
                {
                    var active = document.activeElement;
                    if ((typeof (active) != "undefined") && (active != null))
                    {
                        if ((typeof (active.id) != "undefined") && (active.id != null) && (active.id.length > 0))
                        {
                            lastFocus.value = active.id;
                        }
                        else if (typeof (active.name) != "undefined")
                        {
                            lastFocus.value = active.name;
                        }
                    }
                }
            }
        }
    }
    //if (options.clientSubmit)
    //{
        __doPostBack(options.eventTarget, options.eventArgument);
   // }
}
