﻿Type.registerNamespace('Sys.Net');

Sys.Net.XMLHttpSyncExecutor = function() {
    Sys.Net.XMLHttpSyncExecutor.initializeBase(this);

    this._started = false;
    this._responseAvailable = false;

    this._onReceiveHandler = null;
    this.xmlHttpRequest = null;

    this._responseData = null;
    this._statusCode = null;
    this._statusText = null;
    this._headers = null;
}

Sys.Net.XMLHttpSyncExecutor.prototype =
{
    get_aborted: function() {
        if (arguments.length !== 0) throw Error.parameterCount();

        return false;
    },

    get_responseAvailable: function() {
        if (arguments.length !== 0) throw Error.parameterCount();

        return this._responseAvailable;
    },

    get_responseData: function() {
        if (arguments.length !== 0) throw Error.parameterCount();

        if (!this._responseAvailable) {
            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_responseData'));
        }

        return this._responseData;
    },

    get_started: function() {
        if (arguments.length !== 0) throw Error.parameterCount();

        return this._started;
    },

    get_statusCode: function() {
        if (arguments.length !== 0) throw Error.parameterCount();

        if (!this._responseAvailable) {
            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_statusCode'));
        }

        return this._statusCode;
    },

    get_statusText: function() {
        if (arguments.length !== 0) throw Error.parameterCount();

        if (!this._responseAvailable) {
            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_statusText'));
        }

        return this._statusText;
    },

    get_xml: function() {
        if (arguments.length !== 0) throw Error.parameterCount();

        if (!this._responseAvailable) {
            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_xml'));
        }

        var xml = this._responseData;

        if ((!xml) || (!xml.documentElement)) {
            xml = new XMLDOM(this._responseData);

            if ((!xml) || (!xml.documentElement)) {
                return null;
            }
        }
        else if (navigator.userAgent.indexOf('MSIE') !== -1) {
            xml.setProperty('SelectionLanguage', 'XPath');
        }

        if ((xml.documentElement.namespaceURI === "http://www.mozilla.org/newlayout/xml/parsererror.xml") &&
            (xml.documentElement.tagName === "parsererror")) {
            return null;
        }

        if (xml.documentElement.firstChild && xml.documentElement.firstChild.tagName === "parsererror") {
            return null;
        }

        return xml;
    },

    executeRequest: function() {
        if (arguments.length !== 0) throw Error.parameterCount();

        if (this._started) {
            throw Error.invalidOperation(String.format(Sys.Res.cannotCallOnceStarted, 'executeRequest'));
        }

        var webRequest = this.get_webRequest();

        if (webRequest === null) {
            throw Error.invalidOperation(Sys.Res.nullWebRequest);
        }

        var body = webRequest.get_body();
        var headers = webRequest.get_headers();
        var verb = webRequest.get_httpVerb();

        this.xmlHttpRequest = new XMLHttpRequest();
        this._onReceiveHandler = Function.createCallback(this._onReadyStateChange, { sender: this, xmlHttp: this.xmlHttpRequest });
        this._started = true;
        this.xmlHttpRequest.onreadystatechange = this._onReceiveHandler;
        this.xmlHttpRequest.open(verb, webRequest.getResolvedUrl(), false); // False to call Synchronously

        if (headers) {
            for (var header in headers) {
                var val = headers[header];

                if (typeof (val) !== "function") {
                    this.xmlHttpRequest.setRequestHeader(header, val);
                }
            }
        }

        if (verb.toLowerCase() === "post") {
            if ((headers === null) || !headers['Content-Type']) {
                this.xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            }

            if (!body) {
                body = '';
            }
        }

        this.xmlHttpRequest.send(body);
    },

    getAllResponseHeaders: function() {
        if (arguments.length !== 0) throw Error.parameterCount();

        if (!this._responseAvailable) {
            throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'getAllResponseHeaders'));
        }

        return this._headers;
    },

    _onReadyStateChange: function(e) {
        if (e.xmlHttp.readyState === 4) {
            e.sender._responseAvailable = true;
            e.sender._responseData = e.xmlHttp.responseText;
            e.sender._statusCode = e.xmlHttp.status;
            e.sender._statusText = e.xmlHttp.statusText;
            e.sender._headers = e.xmlHttp.getAllResponseHeaders();

            e.xmlHttp.onreadystatechange = Function.emptyMethod;
            e.sender._onReceiveHandler = null;

            e.sender._started = false;
        }
    }
}

Sys.Net.XMLHttpSyncExecutor.registerClass('Sys.Net.XMLHttpSyncExecutor', Sys.Net.WebRequestExecutor);

if (typeof (Sys) != 'undefined') {
    Sys.Application.notifyScriptLoaded();
}

function padZero(n) {
    n = n.toString();
    if (n.length == 1)
        n = '0' + n;
    return n;
}

function isNotSelectable(date, startSate) {
    var dateArray = document.getElementById('dateArray').value;
    var day = padZero(date.getDate());
    var month = padZero(date.getMonth() + 1);
    var year = date.getFullYear();
    var compDate = day + DateSeparator + month + DateSeparator + year;
    return !(dateArray.indexOf(compDate) >= 0) || (startSate.getMonth() + 1) != month;
}

function IsNumeric(sText) {
    var ValidChars = "0123456789.";
    var IsNumber = true;
    var Char;


    for (i = 0; i < sText.length && IsNumber == true; i++) {
        Char = sText.charAt(i);
        if (ValidChars.indexOf(Char) == -1) {
            IsNumber = false;
        }
    }
    return IsNumber;

}

function dateChanged(sender, date) {
    var compDate = "now";
    if (date != null) {
        var day = padZero(date.getDate());
        var month = padZero(date.getMonth() + 1);
        var year = date.getFullYear();
        compDate = day + "-" + month + "-" + year;
    }
    else {
        if (document.getElementById(StartDateClientID).value.length > 0) {
            var dateStr = document.getElementById(StartDateClientID).value;
            dateStr.split(DateSeparator)[0];
            var day = '01';
            var month = dateStr.split(DateSeparator)[1];
            var year = dateStr.split(DateSeparator)[2];
            if (IsNumeric(month) && IsNumeric(year))
                compDate = day + "-" + month + "-" + year;
        }
    }
    wRequest = new Sys.Net.WebRequest();
    wRequest.set_url(currentUrlBase + '?date=' + compDate); //"default.aspx?date=" + compDate);
    wRequest.set_httpVerb('GET');

    var executor = new Sys.Net.XMLHttpSyncExecutor();
    wRequest.set_executor(executor);
    executor.executeRequest();
    if (executor.get_responseAvailable()) {
        document.getElementById('dateArray').value = executor._responseData;
        //document.getElementById('dateArray').value = executor.xmlHttpRequest.responseText;
    }
    else {
        //for FireFox
        document.getElementById('dateArray').value = executor.xmlHttpRequest.responseText;
    }
}
