<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
        <title>datajs startup perf test</title>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
        <script type="text/javascript" src="./scripts/datajs-2.0.0.js"></script>
        <script type="text/javascript" src="./scripts/tools.js" ></script>
        <style type="text/css">
            .code{font-family:"Courier New",monospace;font-size:13px;line-height:18px;}
            .code ul{list-style:none;margin:0 0 0 1.5em;padding:0;}
            .code li{position:relative;}
            .code.json li:after{content:',';}
            .code.json li:last-child:after{content:'';}
            .code span{white-space:nowrap;padding:2px 1px;}
            .code .property{font-weight:bold;color:#000000;}
            .code .null{color:#9d261d;}
            .code .boolean{color:#760a85;}
            .code .numeric{color:#0076cb;}
            .code .string{color:#247230;}
            .code .deffered{color:#666666;font-size:0.9em;}
            .code .toggle{position:absolute;left:-1em;cursor:pointer;}
            .code .tag{color:#003283;}
            .code .atn{color:#760a85;}
            .code .atv{color:#247230;}
            .code .text{color:#000000;}
            .code .cdata{color:#008080;}
            .code .comment,.code .ns{color:#666666;}
        </style>
    </head>   
    <body>
        <button id="startXML">XML</button><br/>
        <button id="btnJSON_none">pure JSON odata.metadata=none</button><br/>
        <button id="btnJSON_minimal">pure JSON odata.metadata=minimal</button><br/>
        <button id="btnJSON_minimal_to_full">pure JSON odata.metadata=minimal; extendMetadataToLevel=full</button><br/>
        <button id="btnJSON_minimal_to_all">pure JSON odata.metadata=minimal; extendMetadataToLevel=all</button><br/>
        <button id="btnJSON_full">pure JSON odata.metadata=full</button><br/>
        <button id="btnJSON_full_date_conversion">JSON odata.metadata=full (with date conversion)</button><br/>
        <button id="btnJSON_full_to_all">JSON odata.metadata=full; extendMetadataToLevel=all (with adding types for string, bool, numbers)</button><br/>
        <button id="btnJSON_full_to_all_date_conversion">JSON odata.metadata=full; extendMetadataToLevel=all (with adding types for string, bool, numbers) (with date conversion)</button><br/>

        <button id="btnMetaData">MetaData</button><br/>
        <button id="btnJSONwithMetaData">JSON with MetaData</button><br/>
        <div id='resultsArea' data-type="json">
        </div>
        <script>
            //var x = eval("(function (w, undefined) {alert('A '+JSON.stringify(w.screen));})(this);");
            //(function () {
            //    var x = eval("(function (w, undefined) {alert('B '+JSON.stringify(w.screen));})(this);");
            //})();
            

            function show(data) {
                $('#resultsArea').empty();
                var code = $('<code data-type="json"></code>').text(JSON.stringify(data))
                $('#resultsArea').append(code);
                $('code[data-type]').prettify();
                //$('#resultsArea').prettify();
            }
            function success(data) {
                show(data);
            }

            function errorFunc(err) {
                $('#resultsArea').empty();
                $("#resultsArea").text(JSON.stringify(err));
            }

            function getMetaData(metaDatasuccess) {
                var oHeaders = {
                    'Accept': 'text/html,application/xhtml+xml,application/xml,application/json;odata.metadata=full',
                    "Odata-Version": "4.0",
                    "OData-MaxVersion": "4.0",
                    "Prefer": "odata.allow-entityreferences"
                };
                var metadataRequest =
                {
                    headers: oHeaders,
                    //requestUri: "http://services.odata.org/OData/OData.svc/$metadata",
                    requestUri: "http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/$metadata", //"http://localhost:6630/PrimitiveKeys.svc/$metadata",
                    data: null,
                };
                datajs.V4.oData.read(metadataRequest, metaDatasuccess, errorFunc,datajs.V4.oData.metadataHandler);
            };

            $('#startXML').on("click", function(){
                //var requestUri = 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods';
                var requestUri ='http://localhost:4003/sap/bc/ds/odata/v4/ESMixPrimCollComp?$format=xml';
                datajs.V4.oData.read(requestUri, success, errorFunc);
            });
            $('#btnJSON_none').on("click", function(){
                var requestUri = {
                    requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
                    headers : { Accept : 'application/json;odata.metadata=none' }
                };
                datajs.V4.oData.read(requestUri, success, errorFunc);
            });
            $('#btnJSON_minimal').on("click", function(){
                var requestUri = {
                    requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
                    headers : { Accept : 'application/json;odata.metadata=minimal' }
                };
                datajs.V4.oData.read(requestUri, success, errorFunc);
            });
            $('#btnJSON_full').on("click", function(){
                var requestUri = {
                    requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
                    headers : { Accept : 'application/json;odata.metadata=full' }
                };
                datajs.V4.oData.read(requestUri, success, errorFunc);
            });

            $('#btnJSON_full_to_all').on("click", function(){
                var requestUri = {
                    requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
                    headers : { Accept : 'application/json;odata.metadata=full' },
                    extendMetadataToLevel : 'all' ,
                    recognizeDates : false
                };
                datajs.V4.oData.read(requestUri, success, errorFunc);
            });
            $('#btnJSON_full_to_all_date_conversion').on("click", function(){
                var requestUri = {
                    requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
                    headers : { Accept : 'application/json;odata.metadata=full' },
                    extendMetadataToLevel : 'all' ,
                    recognizeDates : true
                };
                datajs.V4.oData.read(requestUri, success, errorFunc);
            });
            $('#btnJSON_full_date_conversion').on("click", function(){
                var requestUri = {
                    requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
                    headers : { Accept : 'application/json;odata.metadata=full' },
                    recognizeDates : true
                };
                datajs.V4.oData.read(requestUri, success, errorFunc);
            });

            $('#btnMetaData').on("click", function(){
                var oHeaders = {
                    'Accept': 'text/html,application/xhtml+xml,application/xml,application/json;odata.metadata=full',
                    "Odata-Version": "4.0",
                    "OData-MaxVersion": "4.0",
                    "Prefer": "odata.allow-entityreferences"
                };
                var metadataRequest =
                {
                    headers: oHeaders,
                    //requestUri: "http://services.odata.org/OData/OData.svc/$metadata",
                    requestUri: "http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/$metadata", //"http://localhost:6630/PrimitiveKeys.svc/$metadata",
                    data: null,
                };

                datajs.V4.oData.read(metadataRequest, success, errorFunc,datajs.V4.oData.metadataHandler);
            });



            $('#btnJSON_minimal_to_all').on("click", function(){
                var metaDatasuccess = function(metadata){
                    var requestUri = {
                        requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
                        headers : { Accept : 'application/json;odata.metadata=minimal' },
                        extendMetadataToLevel : 'all' ,
                        recognizeDates : false
                    };
                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
                }
                getMetaData(metaDatasuccess);
            });

            $('#btnJSON_minimal_to_full').on("click", function(){
                var metaDatasuccess = function(metadata){
                    var requestUri = {
                        requestUri : 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods',
                        headers : { Accept : 'application/json;odata.metadata=minimal' },
                        extendMetadataToLevel : 'full' ,
                        recognizeDates : false
                    };
                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
                }
                getMetaData(metaDatasuccess);
            });

            $('#btnJSONwithMetaData').on("click", function(){
                var oHeaders = {
                    'Accept': 'text/html,application/xhtml+xml,application/xml,application/json;odata.metadata=full',
                    "Odata-Version": "4.0",
                    "OData-MaxVersion": "4.0",
                    "Prefer": "odata.allow-entityreferences"
                };
                var metadataRequest =
                {
                    headers: oHeaders,
                    //requestUri: "http://services.odata.org/OData/OData.svc/$metadata",
                    requestUri: "http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/$metadata", //"http://localhost:6630/PrimitiveKeys.svc/$metadata",
                    data: null,
                };

                var metaDatasuccess = function(metadata){
                    var requestUri = 'http://localhost:4002/tests/endpoints/FoodStoreDataServiceV4.svc/Foods';
                    datajs.V4.oData.read(requestUri, success, errorFunc, null, null, metadata);
                }


                datajs.V4.oData.read(metadataRequest, metaDatasuccess, errorFunc,datajs.V4.oData.metadataHandler);
            });

        </script>
    </body>
</html>