
// WRITTEN BY DATADIAL.
// Source of reference is http://www.west-wind.com/weblog/posts/729630.aspx

(function () {
		   
	$.toJSON = function(obj) {
		function isDate(o) {
			return !!(o && typeof o == 'object' && 'getDate' in o && 'getFullYear' in o && 'setMilliseconds' in o);
		}
		
		function reviver(key, value) {
			if (isDate(value)) {
				value = '\\/Date(' + Date.parse(value)+'+0100'  + ')\\/';
			}
			return value;
		}
	
		function walk(holder, key) {
			var k, v, value = holder[key];
			if (value && typeof value === 'object') {
				for (k in value) {
					if (Object.hasOwnProperty.call(value, k)) {
						v = walk(value, k);
						if (v !== undefined) {
							value[k] = v;
						} else {
							delete value[k];
						}
					}
				}
			}
			return reviver.call(holder, key, value);
		}
		return JSON.stringify(walk({'': obj}, '')).replace(/\\\\\/Date/g, '\\\/Date').replace(/\)\\\\\//g, ')\\\/');
	};

	$.fixDates = function(obj){
		function reviver(key, value) {
			if (typeof value === 'string') {
				var reMsAjax = /^\/Date\((d|-|.*)\)\/$/;
				var a = reMsAjax.exec(value);
				if (a) {
					var b = a[1].split(/[-,.]/);
					value = new Date(+parseInt(b[0]));
				}
			}
			return value;
		}
	
		function walk(holder, key) {
			var k, v, value = holder[key];
			if (value && typeof value === 'object') {
				for (k in value) {
					if (Object.hasOwnProperty.call(value, k)) {
						v = walk(value, k);
						if (v !== undefined) {
							value[k] = v;
						} else {
							delete value[k];
						}
					}
				}
			}
			return reviver.call(holder, key, value);
		}
		return walk({'': obj}, '');
	}

}());
