﻿function Object() {
} 

Object.CloneObject = function(obj) {
    if (obj == null || typeof (obj) != 'object')
        return obj;

    var temp = new obj.constructor(); // changed (twice)
    for (var key in obj) {
        if (typeof (obj[key]) != 'function')
            temp[key] = Object.CloneObject(obj[key]);
    }
    return temp;
}




//-----------------------------------------------------------------------------------------------------
/* COOKIE */
//-----------------------------------------------------------------------------------------------------
function Cookie(name, expires, value) {
    this.name = name;
    this.expires = expires;
    this.value = value;
}

Cookie.prototype.getName = function () {
    return this.name;
}

Cookie.prototype.setName = function (name) {
    this.name = name;
}

Cookie.prototype.getValue = function () {
    return this.value;
}

Cookie.prototype.setValue = function (value) {
    this.value = value;
}

Cookie.prototype.getExpires = function () {
    return this.expires;
}

Cookie.prototype.setExpires = function (expires) {
    this.expires = expires;
}

Cookie.SetCookie = function (cookieToAdd) {
    try {
        var cookieString = cookieToAdd.getName() + "=" + escape(cookieToAdd.getValue()) +
        ((cookieToAdd.getExpires() == null) ? "" : "; expires=" + cookieToAdd.getExpires().toUTCString());
        document.cookie = cookieString;
    }
    catch (ex) { }
}

Cookie.GetCookie = function (name) {
    var value = "";

    try {
        if (document.cookie.length > 0) {
            var c_start = document.cookie.indexOf(name + "=");
            if (c_start != -1) {
                c_start = c_start + name.length + 1;
                var c_end = document.cookie.indexOf(";", c_start);
                if (c_end == -1)
                    c_end = document.cookie.length;
                value = unescape(document.cookie.substring(c_start, c_end));
            }
        }
    }
    catch (ex) { }

    return new Cookie(name, null, value);
}


//------------------------------   COOKIE BİTİŞ   -----------------------------------------------------
//**********************************************************************************************************************
//endregion


//region ENUMERABLE
//**********************************************************************************************************************
//------------------------------   ENUMERABLE TANIMLAMASI -------------------------------------------------------
function Enumerable() {
}

Enumerable.IndexOf = function (array, value) {
    for (var i = 0; i < array.length; i++) {
        var temp = array[i];
        if (value != null) {
            var meetsCondition = (value == temp);

            if (meetsCondition) {
                return i;
            }
        }
    }

    return -1;
}

Enumerable.FirstOrDefault = function (array, predicate) {
    for (var i = 0; i < array.length; i++) {
        var temp = array[i];
        if (predicate != null) {
            var meetsCondition = predicate(temp);

            if (meetsCondition) {
                return temp;
            }
        }
    }

    return null;
}

Enumerable.Contains = function (array, predicate) {
    return Enumerable.FirstOrDefault(array, predicate) != null;
}

Enumerable.Where = function (array, predicate) {
    var result = new Array();

    for (var i = 0; i < array.length; i++) {
        var temp = array[i];
        if (predicate != null) {
            var meetsCondition = predicate(temp);

            if (meetsCondition) {
                result.push(temp);
            }
        }
    }

    return result;
}

Enumerable.OrderBy = function (array, predicate) {
    var result = array;

    for (var i = 0; i < result.length; i++) {
        if (predicate != null) {
            for (j = 0; j < i; j++) {
                if (predicate(result[j]) > predicate(result[j + 1])) {
                    var temp2 = result[j];
                    result[j] = result[j + 1];
                    result[j + 1] = temp2;
                }
            }
        }
    }

    return result;
}

Enumerable.Count = function (array, predicate) {
    if (predicate == null)
        return array.length;

    var temp = 0;
    var result = array;

    for (var i = 0; i < result.length; i++) {
        if (predicate(result[i]) == true)
            temp++;
    }

    return temp;
}

Enumerable.Distinct = function (array, predicate) {
    var result = array;
    var dist = new Array();

    for (var i = 0; i < result.length; i++) {
        var got = predicate(result[i]);

        if (Enumerable.FirstOrDefault(dist, function (e) { return e == got; }) == null)
            dist.push(got);
    }

    return dist;
}

Enumerable.Take = function (array, count) {
    var result = array;
    var dist = new Array();

    if (array.length <= count)
        return array;

    for (var i = 0; i < count; i++) {
        dist.push(result[i]);
    }

    return dist;
}

Enumerable.GetPage = function (array, page, pageSize) {
    var result = array;
    var dist = new Array();

    var itemCountToSkip = (page - 1) * pageSize;
    if (array.length <= itemCountToSkip)
        return dist;

    for (var i = itemCountToSkip; i < itemCountToSkip + pageSize; i++) {
        if (result.length > i)
            dist.push(result[i]);
    }

    return dist;
}

//------------------------------   ENUMERABLE BİTİŞ   -----------------------------------------------------
//**********************************************************************************************************************
//endregion










//region STRING
//**********************************************************************************************************************
//------------------------------   STRING TANIMLAMASI -------------------------------------------------------

function StringExtensions() {
}

StringExtensions.MakeSingleDot = function (value, maxLength) {
    if (value.length > maxLength) {
        return value.substr(0, maxLength - 1) + ".";
    }

    return value;
}

StringExtensions.IsNullOrEmpty = function (value) {
    if (value == null)
        return true;
    return value.replace(/\s/g, "") == "";
}


//------------------------------   STRING BİTİŞ   -----------------------------------------------------
//**********************************************************************************************************************
//endregion




function ParseDate(data) {
    var dateParts = data.split(",");
    var result = new Date(dateParts[0], dateParts[1] - 1, dateParts[2], dateParts[3], dateParts[4], dateParts[5]);
    return result;
}





//region DOCUMENTEXTENSIONS
//**********************************************************************************************************************
//------------------------------   DOCUMENTEXTENSIONS TANIMLAMASI -------------------------------------------------------


function DocumentExtensions() {
}

DocumentExtensions.OuterHtml = function (node) {
    var el;
    if (node.outerHTML) {
        return node.outerHTML;
    } else if (node.parentNode && node.parentNode.nodeType == 1) {
        var el = document.createElement(node.parentNode.nodeName);
        el.appendChild(node.cloneNode(true));
        return el.innerHTML;
    }
    return "";
}



//------------------------------   DOCUMENTEXTENSIONS BİTİŞ   -----------------------------------------------------
//**********************************************************************************************************************
//endregion
