﻿HTB = {
    R: {
        urlRegExp: new RegExp(/(?:http:\/\/|https:\/\/|ftp:\/\/|ftps:\/\/|www.)[\w-]+[\w\d\:\<\>\#\@\%\/\;\$\(\)\~\_\?\+\-\=\\\.\&\|\!\^\*\''\''''\,]*/g)
        , monthNames: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"]
        , halfMin: 'منذ نصف دقيقة'
        , lessMin: 'منذ أقل من دقيقة'
        , abut: 'حوالي '
        , day: ' يوم '
        , days: ' أيام '
        , hours: ' ساعات '
        , hour: ' ساعة '
        , min: ' دقيقة '
        , mins: ' دقائق '
    }
};
HTB.FN = {
    swapClass: function(orgnl, st, nd) {
        if ($(orgnl).hasClass(st)) {
            $(orgnl).removeClass(st.replace('.', ''));
            $(orgnl).addClass(nd.replace('.', ''));
        }
        else {
            $(orgnl).removeClass(nd.replace('.', ''));
            $(orgnl).addClass(st.replace('.', ''));
        }
    },
    chngExpToLnk: function(options) {
        var exp = options.exp
        , text = options.txt
        , tmplt = options.orgTmpl
        , exToEx = options.exToEx
        , exToRmv = options.exToRmv;
        if (HTB.VL.isNlOrUn(exToEx))
            exToEx = [];
        if (HTB.VL.isNlOrUn(exToRmv))
            exToRmv = [];

        var items = HTB.FN.fltrByExp(text, exp);
        if (!HTB.VL.isNlOrUn(items)) {
            for (var i = 0; i < items.length; i++) {
                var itm = items[i];
                for (var r = 0; r < exToRmv.length; r++)
                    if (itm.indexOf(exToRmv[r]) > -1)
                    itm = itm.substring(0, itm.indexOf(exToRmv[r]))
                if (itm.length > 2
                && !HTB.FN.cntanAny(itm, exToEx)) {
                    if (!HTB.VL.isNlOrUn(tmplt)) {
                        var val = tmplt.replace(/value/g, itm)
                        , href = $(val).attr('href');
                        if (!HTB.VL.isNlOrUn(href) && href.length > 3 && href.substring(0, 3) == 'www')
                            val = tmplt.replace('value', 'http://' + itm).replace('value', itm);
                        var lstIx = 0;
                        while (text.indexOf(itm, lstIx) > -1) {
                            var newText = text.substring(0, text.indexOf(itm, lstIx)) + val + text.substring(text.indexOf(itm, lstIx) + itm.length, text.length)
                            lstIx = text.indexOf(itm, lstIx) + val.length;
                            text = newText;
                        }
                    }
                }
            }
        }
        return text;
    },
    decdFrmXml: function(text) {
        while (text.indexOf('&lt;', 0) > -1)
            text = text.replace('&lt;', '<');
        while (text.indexOf('&gt;', 0) > -1)
            text = text.replace('&gt;', '>');
        while (text.indexOf('&quot;', 0) > -1)
            text = text.replace('&quot;', '\'');
        return text;
    },
    trim: function(str) {
        return HTB.FN.ltrim(HTB.FN.rtrim(str));
    },
    ltrim: function(str) {
        return str.replace((/^\s+/g), '');
    },
    rtrim: function(str) {
        return str.replace((/\s+$/g), '');
    },
    getPropVal: function(obj, key) {
        var list = key.split('.'), result = obj;
        for (var i = 0; i < list.length; i++) {
            if (HTB.VL.isNlOrUn(result[list[i]]))
                return undefined;
            result = result[list[i]];
        }
        return result;
    },
    fltrByExp: function(string, reg) {
        var re = new RegExp(reg);
        return string.match(re);
    },
    first: function(array, value, key) {
        if (HTB.VL.isNlOrUn(key))
            key = '';
        for (var i = 0; i < array.length; i++) {
            var result = array[i];
            if (key.toString().length > 0) {
                var list = key.split('.');
                for (var x = 0; x < list.length; x++) {
                    if (typeof result[list[x]] == typeof undefined || result[list[x]] == null)
                        break;
                    result = result[list[x]];
                }
            }
            if (result == value)
                return array[i];
        }
        return null;
    },
    all: function(array, value, key) {
        if (HTB.VL.isNlOrUn(key))
            key = '';
        var newArray = new Array();
        for (var i = 0; i < array.length; i++) {
            var result = array[i];
            if (key.toString().length > 0) {
                var list = key.split('.');
                for (var x = 0; x < list.length; x++) {
                    if (typeof result[list[x]] == typeof undefined || result[list[x]] == null)
                        break;
                    result = result[list[x]];
                }
            }
            if (result == value)
                newArray[newArray.length] = array[i];
        }
        return newArray;
    },
    firstIndex: function(array, value, key) {
        if (HTB.VL.isNlOrUn(key))
            key = '';
        for (var i = 0; i < array.length; i++) {
            var result = array[i];
            if (key.toString().length > 0) {
                var list = key.split('.');
                for (var x = 0; x < list.length; x++) {
                    if (typeof result[list[x]] == typeof undefined || result[list[x]] == null)
                        break;
                    result = result[list[x]];
                }
            }
            if (typeof result == "string") {
                if (result.toLowerCase() == value.toLowerCase())
                    return i;
            }
            else {
                if (result == value)
                    return i;
            }
        }
        return -1;
    },
    remove: function(array, item) {
        for (var i = 0; i < array.length; i++) {
            if (array[i] == item) {
                array.splice(i, 1);
                i--;
            }
        }
    },
    cntan: function(text, expression) {
        return text.toString().indexOf(expression) > -1;
    },
    cntanAny: function(text, expressions) {
        for (var i = 0; i < expressions.length; i++)
            if (HTB.FN.cntan(text, expressions[i]))
            return true;
        return false;
    },
    strRmvAl: function(text, array) {
        for (var i = 0; i < array.length; i++) {
            if (text.indexOf(array[i]) > -1) {
                text = text.replace(array[i], '');
                i = 0;
            }
        }
        return text;
    },
    clnArr: function(array) {
        var newArr = new Array();
        for (i in array) {
            if (array[i] instanceof Array)
                newArr[i] = HTB.FN.clnArr(array[i]);
            else
                newArr[i] = array[i];
        }
        return newArr;
    },
    gtln: function(txt) {
        var lngth = 0;
        for (var i = 0; i < txt.length; i++) {
            lngth++;
            if (txt.charCodeAt(i) > 255)
                lngth++;
        }
        return lngth
    }
};
HTB.VL = {
    isEmpty: function(fld, value) {
        if (HTB.FN.trim($(fld).val()) == HTB.FN.trim(value))
            return true;
        else
            return false;
    },
    isNlOrUn: function(object) {
        if (typeof object == typeof undefined || object == null || (typeof object == typeof NaN && isNaN(object)))
            return true;
        return false;
    },
    isEmSt: function(object) {
        if (object.toString().length > 0)
            return false;
        return true;
    },
    isNlOrUnOrEmSt: function(object) {
        if (!HTB.VL.isNlOrUn(object) && !HTB.VL.isEmSt(object))
            return false;
        return true;
    },
    isUrl: function(text) {
        if (text.match(HTB.R.urlRegExp))
            return true;
        return false;
    }
};
HTB.QueryString = {
    R: {
        qsObj: null
    },
    loadCurrentQS: function() {
        HTB.QueryString.R.qsObj = new Object()
        var url = location.href;
        if (url.indexOf("?") > -1) {
            var strParams = url.split("?")[1].split("&");
            for (var i = 0; i < strParams.length; i++) {
                var qsParam = strParams[i].split("=");
                HTB.QueryString.R.qsObj[qsParam[0].toLowerCase()] = qsParam[1];
            }
        }
    },
    getQSValue: function(q) {
        if (!HTB.QueryString.R.qsObj) {
            HTB.QueryString.loadCurrentQS();
        }
        return HTB.QueryString.R.qsObj[q];
    }
};
HTB.ajax = {
    R: {
        doCallbackHtml: function(id, param, callback) {
            $.ajaxSetup({
                contentType: "application/x-www-form-urlencoded"
            });
            var postData = "__CALLBACKID=" + escape(id) + "&__CALLBACKPARAM=" + escape(param) + "&__VIEWSTATE=&";
            $.post(document.URL, postData, function(data, status) {
                if (data.charAt(0) == "s") {
                    status = "success";
                    data = data.substring(1);
                } else if (data.charAt(0) == "e") {
                    status = "error";
                    data = data.substring(1);
                } else {
                    var separatorIndex = data.indexOf("|");
                    if (separatorIndex != -1) {
                        var valLength = parseInt(data.substring(0, separatorIndex));
                        if (!isNaN(valLength)) {
                            data = data.substring(separatorIndex + valLength + 1);
                        }
                    }
                }
                if (callback != null)
                    callback(data, status);
            }, "html");
        }
    }
};
HTB.Cookie = {
    R: {
        // Development
//        getCookieUrl: 'http://10.2.20.63/SSOCore/Cookies/getcookie?callback=?'
//        , setCookieUrl: 'http://10.2.20.63/SSOCore/Cookies/setcookie?callback=?'
//        , setCookieKeyValueUrl: 'http://10.2.20.63/SSOCore/Cookies/setcookieKeyValue?callback=?'
//        , deleteCookieUrl: 'http://10.2.20.63/SSOCore/Cookies/deletecookie?callback=?'
//        , ssoServicev2Url: 'http://10.2.20.63/LINKdotNET.CentralServices.SSO.Host/SSOServiceV2.svc'
        // Deployment stg
        //                       getCookieUrl: 'http://passportstg.linkonlineworld.com/SSOCore/Cookies/getcookie?callback=?'
        //                , setCookieUrl: 'http://passportstg.linkonlineworld.com/SSOCore/Cookies/setcookie?callback=?'
        //                , setCookieKeyValueUrl: 'http://passportstg.linkonlineworld.com/SSOCore/Cookies/setcookieKeyValue?callback=?'
    //                , deleteCookieUrl: 'http://passportstg.linkonlineworld.com/SSOCore/Cookies/deletecookie?callback=?'

    // Deployment live
                           getCookieUrl: 'http://passport.linkonlineworld.com/SSOCore/Cookies/getcookie?callback=?'
                   , setCookieUrl: 'http://passport.linkonlineworld.com/SSOCore/Cookies/setcookie?callback=?'
                   , setCookieKeyValueUrl: 'http://passport.linkonlineworld.com/SSOCore/Cookies/setcookieKeyValue?callback=?'
                   , deleteCookieUrl: 'http://passport.linkonlineworld.com/SSOCore/Cookies/deletecookie?callback=?'
    },
    setCookie: function(name, value, callback, error) {
        $.ajax({
            url: HTB.Cookie.R.setCookieUrl
            , type: "GET"
            , data: { name: name, value: value }
            , dataType: "jsonp"
            , success: function(data) {
                if (callback)
                    callback(data)
            }
            , error: function(data) {
                if (error)
                    error(data);
            }
        });
    },
    getCookie: function(name, callback, error) {
        $.ajax({
            url: HTB.Cookie.R.getCookieUrl
            , type: "GET"
            , data: { name: name }
            , dataType: "jsonp"
            , success: function(data) {
                if (callback)
                    callback(data)
            }
            , error: function(data) {
                if (error)
                    error(data);
            }
        });
    },
    delCookie: function(name, callback, error) {
        $.ajax({
            url: HTB.Cookie.R.deleteCookieUrl
            , type: "GET"
            , data: { name: name }
            , dataType: "jsonp"
            , success: function(data) {
                if (callback)
                    callback(data)
            }
            , error: function(data) {
                if (error)
                    error(data);
            }
        });
    },
    getCookieKeyVal: function(name, Key, callback, error) {
        HTB.Cookie.getCookie(name,
        function(data) {
            if (callback)
                callback(data.Items[Key]);
        }
        , function(data) {
            if (error)
                error(data);
        });
    },



    setCookieKeyVal: function(name, key, value, callback, error) {
        $.ajax({
            url: HTB.Cookie.R.setCookieKeyValueUrl
            , type: "GET"
            , data: { name: name, key: key, value: value }
            , dataType: "jsonp"
            , success: function(data) {
                if (callback)
                    callback(data)
            }
            , error: function(data) {
                if (error)
                    error(data);
            }
        });
    }
};
