﻿// (c) 2009 Microsoft Corporation, All Rights Reserved
// Use of this software is subject to the following license terms: 
// http://go.microsoft.com/fwlink/?LinkId=163454
Type._registerScript("MicrosoftAjaxAdoNet.js",["MicrosoftAjaxWebServices.js"]);Type.registerNamespace("Sys.Data");if(!Sys.Data.IDataProvider){Sys.Data.IDataProvider=function(){};Sys.Data.IDataProvider.prototype={fetchData:function(){}};Sys.Data.IDataProvider.registerInterface("Sys.Data.IDataProvider")}if(!Sys.Data.MergeOption){Sys.Data.MergeOption=function(){throw Error.notImplemented()};Sys.Data.MergeOption.prototype={appendOnly:0,overwriteChanges:1};Sys.Data.MergeOption.registerEnum("Sys.Data.MergeOption")}Sys.Data.AdoNetQueryBuilder=function(b){var a=this;a._queryParameters={};a._uri=b;var c=b.indexOf("?");if(c>=0){a._uri=b.substr(0,c);var e=b.substr(c+1).split("&");for(var f in e){param=e[f];var d=param.indexOf("=");if(d>=0)a._queryParameters[decodeURIComponent(param.substr(0,d))]=decodeURIComponent(param.substr(d+1));else a._queryParameters[decodeURIComponent(param)]=""}}};Sys.Data.AdoNetQueryBuilder.prototype={_queryParameters:null,_uri:null,get_skip:function(){return this._getIntParam("$skip")},set_skip:function(a){this._setParam("$skip",a)},get_top:function(){return this._getIntParam("$top")},set_top:function(a){this._setParam("$top",a)},get_orderby:function(){return this._getStringParam("$orderby")},set_orderby:function(a){this._setParam("$orderby",a)},get_filter:function(){return this._getStringParam("$filter")},set_filter:function(a){this._setParam("$filter",a)},get_expand:function(){return this._getStringParam("$expand")},set_expand:function(a){this._setParam("$expand",a)},get_resourcePath:function(){return this._uri},get_queryParameters:function(){return this._queryParameters},set_queryParameters:function(a){this._queryParameters=a},toString:function(){var a,d,c,b=[],f=this._queryParameters,g=Sys.Data.AdoNetQueryBuilder._queryOptions;for(a in f)if(f.hasOwnProperty(a)&&!Array.contains(g,a)){c=f[a];if(c!=null)b.push({key:a,value:c})}for(d in g){a=g[d];c=f[a];if(c!=null)b.push({key:a,value:c})}var e=new Sys.StringBuilder(this._uri),h=true;for(d in b)if(b.hasOwnProperty(d)){e.append(h?"?":"&");e.append(encodeURIComponent(b[d].key));e.append("=");e.append(encodeURIComponent(b[d].value));h=false}return e.toString()},_getIntParam:function(b){var a=parseInt(this._queryParameters[b]);return isNaN(a)?null:a},_getStringParam:function(b){var a=this._queryParameters[b];return a||null},_setParam:function(b,a){if(typeof a==="undefined"||a===null)delete this._queryParameters[b];else this._queryParameters[b]=a}};Sys.Data.AdoNetQueryBuilder._queryOptions=["$filter","$orderby","$skip","$top"];Sys.Data.AdoNetQueryBuilder.registerClass("Sys.Data.AdoNetQueryBuilder");Sys.Data._AdoNetUtil=function(){};Sys.Data._AdoNetUtil.concatUris=function(b,a){if(a.indexOf("//")>=0)return a;if(b.endsWith("/"))b=b.substr(0,b.length-1);if(a.startsWith("/"))a=a.substr(1);return b+"/"+a};Sys.Data._AdoNetUtil.extractETag=function(a){return a.__metadata?a.__metadata.etag||null:null};Sys.Data._AdoNetUtil.extractUri=function(a){return a.__metadata?a.__metadata.uri||null:null};Sys.Data._AdoNetUtil.registerClass("Sys.Data._AdoNetUtil");Sys.Data.AdoNetActionResult=function(e,c,b,d){var a=this;a._result=e;a._headers=c||{};a._actionContext=b;a._operation=d};Sys.Data.AdoNetActionResult.prototype={_actionContext:null,_operation:null,_result:null,_headers:null,get_httpHeaders:function(){return this._headers},get_actionContext:function(){return this._actionContext},get_operation:function(){return this._operation},get_result:function(){return this._result}};Sys.Data.AdoNetActionResult.registerClass("Sys.Data.AdoNetActionResult");Sys.Data.AdoNetActionSequence=function(a){this._actionQueue=[];this._dataService=a};Sys.Data.AdoNetActionSequence.prototype={get_serviceProxy:function(){return this._dataService},addInsertAction:function(d,b,c){var a=this._actionQueue;a[a.length]=[0,b,d,c]},addUpdateAction:function(d,c,b){var a=this._actionQueue;a[a.length]=[1,c||null,d,b]},addRemoveAction:function(c,b){var a=this._actionQueue;a[a.length]=[2,null,c,b]},clearActions:function(){this._actionQueue=[]},execute:function(k,l,m){var e=this,h=e._actionQueue,b=new Sys.Data._AdoNetBatchWriter(window.location.host),j=e._dataService;e._actionQueue=[];b.startChangeSet();for(var g=0,n=h.length;g<n;g++){var c=h[g],d=c[1],f=c[2],i=Sys.Data._AdoNetUtil.extractETag(f);switch(c[0]){case 0:c[0]="insert";b.addChange(d,i,"POST",Sys.Serialization.JavaScriptSerializer.serialize(f),g);break;case 1:c[0]="edit";if(!d)d=Sys.Data._AdoNetUtil.extractUri(f);b.addChange(d,i,j.get_replaceOnUpdate()?"PUT":"MERGE",Sys.Serialization.JavaScriptSerializer.serialize(f));break;case 2:c[0]="remove";d=Sys.Data._AdoNetUtil.extractUri(f);b.addChange(d,i,"DELETE",null)}}b.endChangeSet();var a=new Sys.Net.WebRequest;a.set_url(Sys.Data._AdoNetUtil.concatUris(j.get_serviceUri(),"$batch"));a.get_headers()["Content-Type"]="multipart/mixed; boundary="+b.get_topBoundary();a.set_httpVerb("POST");a.set_timeout(j.get_timeout());a.set_body(b.get_requestBody());a.set_userContext({q:h,bw:b,c:m,s:k,f:l});a.add_completed(Function.createDelegate(e,e._batchCompleted));a.invoke();return a},_batchCompleted:function(g){var d=false,b="actionSequence",f,a,c,h=g.get_webRequest().get_userContext(),q=h.q,o=h.f,n=h.s,l=h.c,u=h.bw,e=this._dataService._checkForError(g,b,d);function s(){var a=c.status?parseFloat(c.status.code):-1;if(a<200||a>300){var g;if(c.headers["Content-Type"]==="application/json"){var f=Sys.Serialization.JavaScriptSerializer.deserialize(c.body);e=Sys.Data.AdoNetActionSequence._getError(d,a,null,f,b)}else e=Sys.Data.AdoNetActionSequence._getError(d,a,String.format(Sys.Data.AdoNetRes.operationFailed,b))}}function j(){if(o)o(e,l,b)}if(e){j();return}a=Sys.Data._AdoNetBatchReader._parseResponse(g);if(a.length!==1){e=Sys.Data.AdoNetActionSequence._getError(d,-1,String.format(Sys.Data.AdoNetRes.invalidBatchResponse,g.get_webRequest().get_url()));j();return}a=a[0];if(a.length===1){c=a[0];s();if(e){j();return}}if(a.length!==q.length){e=Sys.Data.AdoNetActionSequence._getError(d,-1,String.format(Sys.Data.AdoNetRes.invalidBatchResponse,g.get_webRequest().get_url()));j();return}if(n){var r=a.length,p=new Array(r);for(var i=0;i<r;i++){c=a[i],body=c.body;f=null;if(body){f=Sys.Serialization.JavaScriptSerializer.deserialize(body);if(f&&f.d)f=f.d}var m=q[i],k=m[3],t=m[0];if(typeof k==="undefined")k=null;p[i]=new Sys.Data.AdoNetActionResult(f,c.headers,k,t)}n(p,l,b)}}};Sys.Data.AdoNetActionSequence.registerClass("Sys.Data.AdoNetActionSequence");Sys.Data.AdoNetActionSequence._getError=function(h,l,i,d,g){var b=null,c,f=d?d.error:b;if(!f)c=new Sys.Net.WebServiceError(h,String.format(i||Sys.Data.AdoNetRes.operationFailed,g));else{var a=f.message,e=f.innererror,j,k;a=a&&a.value?a.value:b;if(e){k=e.type;j=e.stacktrace}c=new Sys.Net.WebServiceError(h,String.format(i||a||Sys.Data.AdoNetRes.operationFailed,g),j||b,k||b,d)}c._statusCode=l;return c};Sys.Data.AdoNetInvokeParametersBuilder=function(){this._queryBuilder=new Sys.Data.AdoNetQueryBuilder("");this._parameters=this._queryBuilder.get_queryParameters()};Sys.Data.AdoNetInvokeParametersBuilder.prototype={_parameters:null,_queryBuilder:null,get_parameters:function(){return this._parameters},addBoolean:function(b,a){this._parameters[b]=a.toString()},addDate:function(d,a,b){var c=b?a.format("yyyy-MM-ddTHH:mm:ss.fffffffzzz"):a.format("yyyy-MM-ddTHH:mm:ss.fffffff");this._parameters[d]="datetime'"+c+"'"},addDecimal:function(b,a){this._parameters[b]=a.toString()+"M"},addDouble:function(b,a){this._parameters[b]=a.toString()},addGuid:function(b,a){this._parameters[b]="guid'"+a+"'"},addInteger:function(b,a){this._parameters[b]=a.toString()},addString:function(b,a){this._parameters[b]="'"+a.replace(new RegExp("'","g"),"''")+"'"},toString:function(){return this._queryBuilder.toString()}};Sys.Data.AdoNetInvokeParametersBuilder.registerClass("Sys.Data.AdoNetInvokeParametersBuilder");Sys.Data.AdoNetServiceProxy=function(a){this._serviceUri=a;Sys.Data.AdoNetServiceProxy.initializeBase(this)};Sys.Data.AdoNetServiceProxy.prototype={_replaceOnUpdate:false,_serviceUri:null,_usePostTunneling:true,get_path:function(){return this.get_serviceUri()},get_replaceOnUpdate:function(){return this._replaceOnUpdate},set_replaceOnUpdate:function(a){this._replaceOnUpdate=a},get_serviceUri:function(){return this._serviceUri},createActionSequence:function(){return new Sys.Data.AdoNetActionSequence(this)},insert:function(g,d,b,c,e,f){var a=this._prepareWebRequest(g,d,"POST",b,c,e,"insert",f);a.invoke();return a},invoke:function(c,a,h,e,f,g,i){var b=new Sys.Data.AdoNetQueryBuilder(c);b._queryParameters=Sys._combine(b._queryParameters,h);a=a||"GET";var d=this._prepareWebRequest(null,b.toString(),a,e,f,g,c,i);d.invoke();return d},fetchData:function(d,a,k,l,h,i,g,j){var b=this,f,c=null;if(typeof g!=="undefined"){c=b.get_timeout();b.set_timeout(g)}if(a)for(var e in a)if(a.hasOwnProperty(e))d+=(d.indexOf("?")<0?"?":"&")+encodeURIComponent(e)+"="+encodeURIComponent(a[e]);f=b.query(d,h,i,j);if(c!==null)b.set_timeout(c);return f},fetchDeferredProperty:function(a,b,e,g,h,i){var f=Function.createDelegate(this,function(g,f,d){a[b]=g;var c=e||this.get_defaultSucceededCallback();if(c)c(a,f,d)}),c;if(a[b]&&a[b].__deferred&&a[b].__deferred.uri)c=a[b].__deferred.uri;else if(a.__metadata&&a.__metadata.uri)c=a.__metadata.uri+"/"+b;var d=this._prepareWebRequest(null,c,"GET",f,g,h,b,i);d.invoke();return d},query:function(b,c,d,e,f){var a=this._prepareWebRequest(null,b,"GET",c,d,e,b,f);a.invoke();return a},update:function(f,b,c,d,e){var g=this._replaceOnUpdate?"PUT":"MERGE",a=this._prepareWebRequest(f,null,g,b,c,d,"update",e);a.invoke();return a},remove:function(f,b,c,d,e){var a=this._prepareWebRequest(f,null,"DELETE",b,c,d,"remove",e);a.set_body(null);delete a.get_headers()["Content-Type"];a.invoke();return a},_checkForError:function(c,j,l){var d=this,a,g=null,h=false,b=0;if(!c.get_responseAvailable()){h=c.get_timedOut();a=h?Sys.Data.AdoNetRes.operationTimedOut:String.format(Sys.Data.AdoNetRes.operationFailed,j)}else{b=c.get_statusCode();if(b===1223||b===0)b=204;if(l){var i=c.getResponseHeader("DataServiceVersion");if(!i.startsWith("1.0;")&&b!==204)a=i.length>0?String.format(Sys.Data.AdoNetRes.serviceVersionTooHigh,d.get_serviceUri()):String.format(Sys.Data.AdoNetRes.uriNotAdoNetService,d.get_serviceUri())}if(!a&&(b<200||b>=300)){var e=c.getResponseHeader("Content-Type");if(e.startsWith("application/json"))g=c.get_object();else if(e.startsWith("application/xml")||e.startsWith("text/xml")){var m=c.get_xml(),f=m.documentElement.getElementsByTagName("message");if(f&&f.length){var k=f[0];if(k.childNodes.length)a=k.childNodes[0].nodeValue}if(!a)a=String.format(Sys.Data.AdoNetRes.uriNotAdoNetService,d.get_serviceUri())}else a=String.format(Sys.Data.AdoNetRes.uriNotAdoNetService,d.get_serviceUri())}}if(a||g)return Sys.Data.AdoNetActionSequence._getError(h,b,a,g,j);return null},_onResponseComplete:function(c,f,e,d,b){var g=this._checkForError(c,b,true);if(g){if(e)e(g,d,b)}else if(f){var h=c.getResponseHeader("Content-Type"),a=null;if(h.startsWith("application/json")){a=c.get_object();a=a.d||a}f(a,d,b)}},_prepareWebRequest:function(f,m,k,h,g,e,n,a){var i="application/json",b=this;a=a||new Sys.Net.WebRequest;a.set_url(Sys.Data._AdoNetUtil.concatUris(b._serviceUri,m||""));a.set_timeout(b.get_timeout());var c=a.get_headers();c["Accept"]=i;c["DataServiceVersion"]="1.0;AspNetAjax";c["MaxDataServiceVersion"]="1.0;";a.set_httpVerb(k);if(b._usePostTunneling){var d=k.toUpperCase();if(d==="PUT"||d==="DELETE"||d==="MERGE"){a.set_httpVerb("POST");c["X-HTTP-Method"]=d}}if(f){a.set_body(Sys.Serialization.JavaScriptSerializer.serialize(f));c["Content-Type"]=i;var j=Sys.Data._AdoNetUtil.extractETag(f);if(j)c["If-Match"]=j;var l=Sys.Data._AdoNetUtil.extractUri(f);if(l)a.set_url(l)}h=h||b.get_defaultSucceededCallback();g=g||b.get_defaultFailedCallback();if(typeof e==="undefined"||e===null)e=b.get_defaultUserContext();a.add_completed(Function.createDelegate(b,function(a){this._onResponseComplete(a,h,g,e,n)}));return a}};Sys.Data.AdoNetServiceProxy.registerClass("Sys.Data.AdoNetServiceProxy",Sys.Net.WebServiceProxy,Sys.Data.IDataProvider);Sys.Data._AdoNetBatchReader=function(b,c){var a=this;a._responseBody=b;a._boundary=[c];a._position=0;a._responses=[];a._parseParts(a._responses)};Sys.Data._AdoNetBatchReader.prototype={get_responses:function(){return this._responses},_parseParts:function(d){var a=this;if(a._readToMark("--"+a._currentBoundary(),true)===null)return;a._readLine();var e=null;while(e!=="--"&&!a._eof()){var c=[];a._parseHeaders(c);var b=c["Content-Type"];if(b.indexOf("multipart/mixed")===0){var f=[];a._boundary.push(Sys.Data._AdoNetBatchReader._boundaryFromTypeHeader(b));a._parseParts(f);a._boundary.pop();d.push(f);var g=a._readToMark("--"+a._currentBoundary(),true)}else if(b.indexOf("application/http")===0)d.push(a._parseHttpResponse());e=a._peek(2);a._readLine()}},_parseHttpResponse:function(){var a=this,e=a._readLine(),d=a._parseStatus(e),c=[];a._parseHeaders(c);var b=a._readToMark("--"+a._currentBoundary(),true);if(b==="\r\n")b="";return {status:d,headers:c,body:b}},_parseHeaders:function(c){for(var a=this._readLine();a;a=this._readLine()){var b=this._parseHeader(a);c[b.name]=b.value}},_parseHeader:function(a){if(a===null)return null;var b=a.indexOf(":");return b===-1?null:{name:a.substring(0,b).trim(),value:a.substring(b+1).trim()}},_parseStatus:function(b){var a=Sys.Data._AdoNetBatchReader._statusRegExp.exec(b);return a?{code:a[1],text:a[2]}:null},_currentBoundary:function(){return this._boundary[this._boundary.length-1]},_eof:function(){return this._position===-1},_readLine:function(){return this._readToMark("\r\n",false)},_readToMark:function(d,e){var a=this;if(a._eof())return null;var b,c=a._responseBody.indexOf(d,a._position);if(c<0)if(e)b=null;else{b=a._responseBody.substring(a._position);a._position=-1}else{b=a._responseBody.substring(a._position,c);a._position=c+d.length}return b},_peek:function(b){var a=this;if(a._eof())return "";return a._responseBody.substring(a._position,a._position+b)}};Sys.Data._AdoNetBatchReader._boundaryFromTypeHeader=function(b){var c=/;\s*boundary=(.*)$/i,a=c.exec(b);return a?a[1]:null};Sys.Data._AdoNetBatchReader._parseResponse=function(a){var b=new Sys.Data._AdoNetBatchReader(a.get_responseData(),Sys.Data._AdoNetBatchReader._boundaryFromTypeHeader(a.getResponseHeader("Content-Type")));return b.get_responses()};Sys.Data._AdoNetBatchReader._statusRegExp=new RegExp("^HTTP\\/1\\.[01] (\\d{3}) (.*)$","i");Sys.Data._AdoNetBatchReader.registerClass("Sys.Data._AdoNetBatchReader");Sys.Data._AdoNetBatchWriter=function(b){var a=this;a._host=b;a._content="";a._boundary=null;a._changesetBoundary=null;a._changesetEntries=null;a._contentType="application/json"};Sys.Data._AdoNetBatchWriter.prototype={get_contentType:function(){return this._contentType},set_contentType:function(a){this._contentType=a},get_requestBody:function(){return this._content+"--"+this.get_topBoundary()+"--"},get_topBoundary:function(){var a=this;if(!a._boundary)a._boundary="batch_"+a._createBoundary();return a._boundary},addChange:function(b,e,c,d,a){this._changesetEntries.push({uri:b,eTag:e,method:c,body:d,contentId:a})},addQuery:function(a){this._content+=this._startPart(this.get_topBoundary(),"GET",a,null)+"\r\n"},endChangeSet:function(){var a=this,b="";for(var d in a._changesetEntries){var c=a._changesetEntries[d];b+=a._startPart(a._changesetBoundary,c.method,c.uri,c.eTag,c.contentId);if(c.body)b+="Content-Type: "+a._contentType+";charset=utf-8\r\n";b+="\r\n";if(c.body)b+=c.body}if(b)b+="\r\n--"+a._changesetBoundary+"--\r\n";a._content+="\r\n--"+a.get_topBoundary()+"\r\nContent-Type: multipart/mixed;boundary="+a._changesetBoundary+"\r\n\r\n"+b;a._changesetBoundary=null;a._changesetEntries=null},startChangeSet:function(){this._changesetBoundary="changeset_"+this._createBoundary();this._changesetEntries=[]},_createBoundary:function(){function a(){return Math.floor((1+Math.random())*65536).toString(16).substr(1)}return a()+"-"+a()+"-"+a()},_startPart:function(d,e,f,c,b){var a="\r\n--"+d+"\r\nContent-Type: application/http\r\nContent-Transfer-Encoding: binary\r\n\r\n"+e+" "+f+" HTTP/1.1\r\n";if(typeof b==="number")a+="Content-ID: "+b+"\r\n";if(c)a+="If-Match: "+c+"\r\n";a+="Host: "+this._host+"\r\nAccept: "+this.get_contentType()+"\r\nAccept-Charset: utf-8\r\n";return a}};Sys.Data._AdoNetBatchWriter.registerClass("Sys.Data._AdoNetBatchWriter");
Type.registerNamespace('Sys.Data');Sys.Data.AdoNetRes={'uriNotAdoNetService':'The URI \'{0}\' does not point to an ADO.NET Data Service.','invalidBatchResponse':'The batch operation failed due to an invalid response from \'{0}\'.','operationTimedOut':'The data operation \'{0}\' timed out.','operationFailed':'The data operation \'{0}\' failed.','serviceVersionTooHigh':'The URI \'{0}\' points to an ADO.NET Data Service of a higher version than is supported by this library.'};

