﻿String.Empty = "";

String.isNullOrEmpty = function(str) {
    if (str == null || str == String.Empty)
        return true;

    return false;
}

Date.today = function() {
    var dtNow = new Date();
    dtNow.setMilliseconds(0);
    dtNow.setSeconds(0);
    dtNow.setMinutes(0);
    dtNow.setHours(0);

    return dtNow;
}

Date.GetDateFromReportId = function (reportId) {
    return new Date(reportId.replace(/(\w+)(\|)(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d+)/, '$4/$5/$3 $6:$7:$8'));
}
Date.GetDateFromNewsId = function (reportId) {
    return new Date(reportId.replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d+)/, '$2/$3/$1 $4:$5:$6'));
}

function BinarySearchNews(tableRow, value) {

    if (tableRow == null) return -1;
    if (tableRow.length == 0) return -1;

    var n = tableRow.length - 1;
    var first = 0;
    var last = n;
    var mid;

    if ($(tableRow[0]).find("a[reportId]") < value || $(tableRow[n]).find("a[reportId]") < value)
        return -1;

    while (first < last) {
        mid = parseInt((first + (last - first) / 2));

        if (value >= GetNewsId($(tableRow[mid]).find("a[reportId]")))
            last = mid;
        else
            first = mid + 1;
    }

    if (GetNewsId($(tableRow[last]).find("a[reportId]")) == value)
        return last;
    else 
        return -1;
}

function BinarySearch(items, minValue, maxValue) {

    if (items == null) return -1;
    if (items.length == 0) return -1;

    var n = items.length - 1;
    var first = 0;
    var last = n;
    var mid;

    if (items[0] > maxValue || items[n] < minValue)
        return -1;
    
    while (first < last) {
        mid = parseInt((first + (last - first) / 2));

        if (minValue <= items[mid])    
            last = mid;
        else                    
            first = mid + 1;
    }

    if (maxValue < items[last])
        return -1;
    return last;
}

function CloneConstructor(){}

function clone(o, deepClone) {
    if (!o || 'object' !== typeof o) return o;

    if (o.constructor == Object)
        var c = {};
    else if (o.constructor == Array)
        c = new Array();
    else {
        var constructor = CloneConstructor;
        constructor.prototype = o;
        c = new constructor();
    }
    
    var p, v;
    for (p in o) {
        if (o.hasOwnProperty(p)) {
            v = o[p];
            if (v && 'object' === typeof v) {
                c[p] = clone(v);
            }
            else {
                c[p] = v;
            }
        }
    }
    return c;
}

function StopEventPropagation(event) {
    event = event || window.event;
    if (event.stopPropagation) {
        event.stopPropagation();
    }
    else {
        event.cancelBubble = true;
    }
}

function PopupCenter(pageURL, title, w, h, windParams) {
    var left = (screen.width / 2) - (w / 2);
    var top = (screen.height / 2) - (h / 2);
    
    var targetWin = window.open(pageURL, title,
        (String.isNullOrEmpty(windParams) ? 'width=' : windParams + ', width=') + w +
            ', height=' + h + ', top=' + top + ', left=' + left);
    targetWin.focus();
} 


function PreventDefaultEvent(event) {
    event = event || window.event;
    if (event.preventDefault) {
        event.preventDefault();
    }
    else {
        event.returnValue = false;
    }
}


function NotSuppotedError(notSupportedValue) {
    this.message = "Value'" + notSupportedValue + "' is not supported";
}

NotSuppotedError.prototype = Error.prototype;

function registerNS(ns) {
    var nsParts = ns.split(".");
    var root = window;

    for (var i = 0; i < nsParts.length; i++) {
        if (typeof root[nsParts[i]] == "undefined")
            root[nsParts[i]] = new Object();

        root = root[nsParts[i]];
    }
}

var Cookies =
{
    Set: function(name, value, timeSpan, global) {
        var dtNow = new Date();

        var cookieStr = name + "=" + value + ";";

        if (timeSpan) {

            dtNow.setDate(dtNow.getDate() + timeSpan.Days);
            dtNow.setHours(dtNow.getHours() + timeSpan.Hours);
            dtNow.setMinutes(dtNow.getMinutes() + timeSpan.Minutes);
            dtNow.setSeconds(dtNow.getSeconds() + timeSpan.Seconds);

            cookieStr += "expires=" + dtNow.toUTCString() + ";";
        }

        if (global)
            cookieStr += "path=/";

        document.cookie = cookieStr;
    },

    Get: function(name) {
        var cookies = document.cookie.split(";");

        for (var i = 0; i < cookies.length; i++) {

            var values = cookies[i].split("=");

            if (values[0].search(name) != -1) {
                return values[1];
            }
        }

        return null;
    }
}

var Ifx3Utils =
{
    AreDatesEqual: function(d1, d2) {
        return d1.getFullYear() == d2.getFullYear() &&
            d1.getMonth() == d2.getMonth() &&
                d1.getDate() == d2.getDate();
    }
}

