// This JavaScript was automatically generated by
// Jayrock.JsonRpc.Web.JsonRpcJQueryProxyGenerator, Jayrock, Version=0.9.8316.0, Culture=neutral, PublicKeyToken=null
// on 23 Şubat 2012 Perşembe at 09:22:41 (Paris, Madrid)

function UserDataHandler(url, type)
{
    var self = this;
    var m = ["GetUserData","GetUserDataForUpdate","ActivateAccount","CheckAvailability","CheckEmailAvailability","SaveDisplayNameWithMethod","CheckDisplayNameAvailability","CheckURLProfilAvailability","CheckEmailPseudoAvailability","BindAccountToPartner","UnbindAccountFromPartner","CheckAccountAlreadyBoundToPartner","CreateUser","CheckUserData","MergeFBCAccount","MergeFBCAccountWithoutCookie","MergeFBCAccountWithCookieOrNot","CreateFBCUser","ChangePassword","SaveUser","SaveActionMigration","SaveFBCUser","SaveDisplayName","SaveAddress","MergeFBFriends","SaveUserConnectionDate","system.listMethods","system.version","system.about"];
    var idems = [true,true,false,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true];
    
    this[m[0]] = function /* GetUserData */ (callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(0, [ ], callback, options));
        return rpc(new Call(0, { }, callback, options));
    }
    
    this[m[1]] = function /* GetUserDataForUpdate */ (callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(1, [ ], callback, options));
        return rpc(new Call(1, { }, callback, options));
    }
    
    this[m[2]] = function /* ActivateAccount */ (code, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(2, [ code ], callback, options));
        return rpc(new Call(2, { code: code }, callback, options));
    }
    
    this[m[3]] = function /* CheckAvailability */ (pseudo, email, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(3, [ pseudo, email ], callback, options));
        return rpc(new Call(3, { pseudo: pseudo, email: email }, callback, options));
    }
    
    this[m[4]] = function /* CheckEmailAvailability */ (email, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(4, [ email ], callback, options));
        return rpc(new Call(4, { email: email }, callback, options));
    }
    
    this[m[5]] = function /* SaveDisplayNameWithMethod */ (displayNameMethod, displayName, isAllowSearchByName, isMergedAccount, forumName, userId, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(5, [ displayNameMethod, displayName, isAllowSearchByName, isMergedAccount, forumName, userId ], callback, options));
        return rpc(new Call(5, { displayNameMethod: displayNameMethod, displayName: displayName, isAllowSearchByName: isAllowSearchByName, isMergedAccount: isMergedAccount, forumName: forumName, userId: userId }, callback, options));
    }
    
    this[m[6]] = function /* CheckDisplayNameAvailability */ (displayName, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(6, [ displayName ], callback, options));
        return rpc(new Call(6, { displayName: displayName }, callback, options));
    }
    
    this[m[7]] = function /* CheckURLProfilAvailability */ (urlProfil, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(7, [ urlProfil ], callback, options));
        return rpc(new Call(7, { urlProfil: urlProfil }, callback, options));
    }
    
    this[m[8]] = function /* CheckEmailPseudoAvailability */ (email, pseudo, checkEmail, checkPseudo, toSave, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(8, [ email, pseudo, checkEmail, checkPseudo, toSave ], callback, options));
        return rpc(new Call(8, { email: email, pseudo: pseudo, checkEmail: checkEmail, checkPseudo: checkPseudo, toSave: toSave }, callback, options));
    }
    
    this[m[9]] = function /* BindAccountToPartner */ (refPartnerConnect, partnerKey, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(9, [ refPartnerConnect, partnerKey ], callback, options));
        return rpc(new Call(9, { refPartnerConnect: refPartnerConnect, partnerKey: partnerKey }, callback, options));
    }
    
    this[m[10]] = function /* UnbindAccountFromPartner */ (callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(10, [ ], callback, options));
        return rpc(new Call(10, { }, callback, options));
    }
    
    this[m[11]] = function /* CheckAccountAlreadyBoundToPartner */ (refPartnerConnect, partnerKey, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(11, [ refPartnerConnect, partnerKey ], callback, options));
        return rpc(new Call(11, { refPartnerConnect: refPartnerConnect, partnerKey: partnerKey }, callback, options));
    }
    
    this[m[12]] = function /* CreateUser */ (userData, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(12, [ userData ], callback, options));
        return rpc(new Call(12, { userData: userData }, callback, options));
    }
    
    this[m[13]] = function /* CheckUserData */ (userData, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(13, [ userData ], callback, options));
        return rpc(new Call(13, { userData: userData }, callback, options));
    }
    
    this[m[14]] = function /* MergeFBCAccount */ (userData, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(14, [ userData ], callback, options));
        return rpc(new Call(14, { userData: userData }, callback, options));
    }
    
    this[m[15]] = function /* MergeFBCAccountWithoutCookie */ (userData, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(15, [ userData ], callback, options));
        return rpc(new Call(15, { userData: userData }, callback, options));
    }
    
    this[m[16]] = function /* MergeFBCAccountWithCookieOrNot */ (userData, enableCookie, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(16, [ userData, enableCookie ], callback, options));
        return rpc(new Call(16, { userData: userData, enableCookie: enableCookie }, callback, options));
    }
    
    this[m[17]] = function /* CreateFBCUser */ (userData, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(17, [ userData ], callback, options));
        return rpc(new Call(17, { userData: userData }, callback, options));
    }
    
    this[m[18]] = function /* ChangePassword */ (oldPassword, newPassword, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(18, [ oldPassword, newPassword ], callback, options));
        return rpc(new Call(18, { oldPassword: oldPassword, newPassword: newPassword }, callback, options));
    }
    
    this[m[19]] = function /* SaveUser */ (userData, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(19, [ userData ], callback, options));
        return rpc(new Call(19, { userData: userData }, callback, options));
    }
    
    this[m[20]] = function /* SaveActionMigration */ (status, idBlog, ipAddress, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(20, [ status, idBlog, ipAddress ], callback, options));
        return rpc(new Call(20, { status: status, idBlog: idBlog, ipAddress: ipAddress }, callback, options));
    }
    
    this[m[21]] = function /* SaveFBCUser */ (userData, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(21, [ userData ], callback, options));
        return rpc(new Call(21, { userData: userData }, callback, options));
    }
    
    this[m[22]] = function /* SaveDisplayName */ (displayName, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(22, [ displayName ], callback, options));
        return rpc(new Call(22, { displayName: displayName }, callback, options));
    }
    
    this[m[23]] = function /* SaveAddress */ (userData, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(23, [ userData ], callback, options));
        return rpc(new Call(23, { userData: userData }, callback, options));
    }
    
    this[m[24]] = function /* MergeFBFriends */ (fbFriendIds, refPartnerConnect, partnerKey, callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(24, [ fbFriendIds, refPartnerConnect, partnerKey ], callback, options));
        return rpc(new Call(24, { fbFriendIds: fbFriendIds, refPartnerConnect: refPartnerConnect, partnerKey: partnerKey }, callback, options));
    }
    
    this[m[25]] = function /* SaveUserConnectionDate */ (callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(25, [ ], callback, options));
        return rpc(new Call(25, { }, callback, options));
    }
    
    // Returns an array of method names implemented by this service.
    
    this[m[26]] = function /* system.listMethods */ (callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(26, [ ], callback, options));
        return rpc(new Call(26, { }, callback, options));
    }
    
    // Returns the version server implementation using the major, minor, build and revision format.
    
    this[m[27]] = function /* system.version */ (callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(27, [ ], callback, options));
        return rpc(new Call(27, { }, callback, options));
    }
    
    // Returns a summary about the server implementation for display purposes.
    
    this[m[28]] = function /* system.about */ (callback, options)
    {
        if (options && options.paramsArray) return rpc(new Call(28, [ ], callback, options));
        return rpc(new Call(28, { }, callback, options));
    }
    
    var url = typeof(url) === 'string' ? url : 'http://www.beyazperde.com/ws/UserDataHandler.ashx';
    var nextId = 0;

	function Call(method, params, callback, options) {
		options = options || {};
		this.url = ('string' === typeof options.url) ? options.url : 'http://www.beyazperde.com/ws/UserDataHandler.ashx';
		this.callback = callback;
		this.async = typeof(callback) === 'function';
		this.proxy = self;
		this.idempotent = idems[method];
		this.request = 
		{ 
			id	 : ++nextId, 
			method : m[method], 
			params : params
		};

		options.type = ('string' === typeof options.type) ? options.type.toLowerCase() : 'post';
		var timeout = options.timeout;
		switch (options.type) {
			case 'get':
				this.options = { verb: 'GET', cache: true };
				break;
			case 'get-nocache':
				this.options = { verb: 'GET', cache: false };
				break;
			case 'jsonp':
				this.options = { verb: 'GET', cache: true, jsonp: true };
				break;
			case 'post':
			default:
				this.options = { verb: 'POST', cache: true };
				break;
		}
		if (timeout){
			this.options.timeout = timeout;
		}
	}

	function rpc(call) {
		switch (call.options.verb) {
			case 'GET':
				if (call.request.params.constructor === Array)
					throw new Error('Positional parameters are not supported.');

				var params = [];
				$.each(call.request.params, function(k, v) {
					if (v) params.push(k + '=' + encodeURIComponent(v));
				});

				var ajax_REQ = $.ajax({
					url: call.url + '/' + call.request.method,
					type: call.options.verb,
					jsonp: call.options.jsonp ? 'jsonp' : null,
					cache: call.options.cache,
					data: params.join('&'),
					dataType: call.options.jsonp ? 'jsonp' : 'json',
					timeout: (call.options && call.options.timeout)?call.options.timeout:10000,
					async: call.async,
					// TODO error: ...
					success: function(data) {
						if (ajax_REQ) { ajax_REQ.abort(); }
						call.callback(data);
					}
				});

				return ajax_REQ;
				break;
			case 'POST':
				var ajax_REQ = $.ajax({
					contentType: 'application/json',
					url: call.url,
					type: call.options.verb,
					jsonp: call.options.jsonp ? 'jsonp' : null,
					cache: call.options.cache,
					data: JSON.stringify({ version: '1.1', id: call.request.id, method: call.request.method, params: call.request.params }),
					dataType: call.options.jsonp ? 'jsonp' : 'json',
					timeout: (call.options && call.options.timeout)?call.options.timeout:10000,
					async: call.async,
					// TODO error: ...
					success: function(data) {
						if (ajax_REQ) { ajax_REQ.abort(); }
						call.callback(data);
					}
				});

				return ajax_REQ;
				break;
			default:
				break;
		}
	}
}

UserDataHandler.rpcMethods = ["GetUserData","GetUserDataForUpdate","ActivateAccount","CheckAvailability","CheckEmailAvailability","SaveDisplayNameWithMethod","CheckDisplayNameAvailability","CheckURLProfilAvailability","CheckEmailPseudoAvailability","BindAccountToPartner","UnbindAccountFromPartner","CheckAccountAlreadyBoundToPartner","CreateUser","CheckUserData","MergeFBCAccount","MergeFBCAccountWithoutCookie","MergeFBCAccountWithCookieOrNot","CreateFBCUser","ChangePassword","SaveUser","SaveActionMigration","SaveFBCUser","SaveDisplayName","SaveAddress","MergeFBFriends","SaveUserConnectionDate","system.listMethods","system.version","system.about"];

