
$(function(){
	$.extend({
		common : function(){
			return {
				createJsonObject: function(type){
					return $.common.syncLoad("/admin/ajaxCalls.aspx?serverAction=createObject&type="+type, type);
				},
				syncLoad: function(url, label){
					var data = $.ajax({
						url: url,
						async: false,
						dataType: 'json'
					}).responseText;
					
					data = $.common.parseJSON(data);
					
					if(data.error){
						alert('There was a problem loading '+(label || 'this object or collection'));
					}else{
						return data;
					}
				},
				syncPost: function(options){
					if(!options.url){ throw 'No url option supplied to synchPost'; }
					if(!options.data){ throw 'No data option supplied to synchPost'; }
					if(!options.callback){ throw 'No callback option supplied to synchPost'; }
					
					$.ajax({
						type: 'POST',
						url: options.url,
						data: 'postData='+encodeURIComponent(ko.toJSON(options.data)),
						async: false,
						success: function(data){
							data = $.common.parseJSON(data);
							if(data.error.length){ $.dialog.alert(data.error); return; }
							options.callback(data);
						},
						error: function(data){
							$.dialog.alert( data.responseText );
						}
					})
				},
				getParsedJSON : function(url, callback){
					return $.ajax({
						url: url,
						dataType: 'text',
						success: function(data){
							data = $.common.parseJSON(data);
							callback(data);
						}
					});
				},
				parseJSON : function(json){
					return JSON.parse(json, function (key, value) {
						var a;
						if (typeof value === 'string') {
							a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)/.exec(value);
							if (a) {
								return new Date(a[1], a[2]-1, a[3], a[4], a[5], a[6]);
							}
						}
						return value;
					});
				}
			}	
		}()
	});
});


