(function ($) { // Supported methods var methods = { accountContactData: function (options) { doContactData(this, options); }, accountLogin: function (options) { doLogin(this, options); }, accountPasswordRecovery: function (options) { doPasswordRecovery(this, options); }, accountSignup: function (options) { doSignUp(this, options); }, accountSignupStep1: function (options) { doSignUpStep1(this, options); }, accountSignupStep2: function (options) { doSignUpStep2(this, options); }, accountVerifyEmailAddress: function (options) { doVerifyEmailAddress(this, options); }, hsUsersList: function (options) { doHSUsersList(this, options); }, hsUsersCreate: function (options) { doHSUsersCreate(this, options); }, hsUsersUpdate: function (options) { doHSUsersUpdate(this, options); }, hsUsersDelete: function (options) { doHSUsersDelete(this, options); }, hsPasswordRecovery: function (options) { doHSPasswordRecovery(this, options); }, hsDomainRegister: function (options) { doHSDomainRegister(this, options); }, hsDomainDelete: function (options) { doHSDomainDelete(this, options); }, getResellers: function (options) { doGetResellers(this, options); }, getVCard: function (options) { doGetvCard(this, options); }, getSSOLogin: function (options) { doSSOLoginGet(this, options) }, doSSOLogin: function (options) { doSSOLogin(this, options) } }; // Default options that can be overwritten function defaultOptions() { return { 'arid': 333133, 'timezone': 0, 'onError': null, 'onFail': null, 'onSuccess': null }; } function doContactData(_this, _options) { doPostJSONP(_this, 'account/preferences/contact_change', _options, ['full_name', 'first_name', 'last_name', 'company', 'job_position', 'phone_number', 'fax_number', 'address', 'zip_code', 'city', 'state'], 'Account', false); } function doLogin(_this, _options) { doPostJSONP(_this, 'account/login', _options, ['user_name', 'password', 'timezone'], 'Account', false); } function doPasswordRecovery(_this, _options) { doPostJSONP(_this, 'account/password/forgot/1', _options, ['email_address'], 'Account', false); } function doSignUp(_this, _options) { doPostJSONP(_this, 'account/signup/1', _options, ['user_name', 'password'], 'Account', false); } function doSignUpStep1(_this, _options) { doPostJSONP(_this, 'account/signup/twostep/1', _options, ['email_address', 'step'], 'Account', false); } function doSignUpStep2(_this, _options) { doPostJSONP(_this, 'account/signup/twostep/1', _options, ['user_name', 'password', 'country_code', 'company', 'full_name', 'phone_number', 'random', 'step', 'arid'], 'Account', false); } function doVerifyEmailAddress(_this, _options) { doPostJSONP(_this, 'account/signup/verify_email_address', _options, ['email_address', 'random'], 'Account', false); } function doHSUsersList(_this, _options) { doPostJSONP(_this, 'account/hosted_service/users_list', _options, ['users', 'show_all_fields'], 'Account', false); } function doHSUsersCreate(_this, _options) { doPostJSONP(_this, 'account/hosted_service/users_new', _options, ['user_name', 'email_address', 'full_name', 'nick_name'], 'Account', false); } function doHSUsersUpdate(_this, _options) { doPostJSONP(_this, 'account/hosted_service/users_update', _options, ['users', 'email_address', 'full_name', 'nick_name', 'enabled'], 'Account', false); } function doHSUsersDelete(_this, _options) { doPostJSONP(_this, 'account/hosted_service/users_delete', _options, ['users'], 'Account', false); } function doHSPasswordRecovery(_this, _options) { doPostJSONP(_this, 'account/hosted_service/users_password_forgot', _options, ['user_name'], 'Account', false); } function doHSDomainRegister(_this, _options) { doPostJSONP(_this, 'account/hosted_service/domain_register', _options, ['domain_name'], 'Account', false); } function doHSDomainDelete(_this, _options) { doPostJSONP(_this, 'account/hosted_service/domain_delete', _options, [], 'Account', false); } function doGetResellers(_this, _options) { doPostJSONP(_this, 'account/content/resellers/get/1', _options, ['country_code'], 'Account', true); } function doGetvCard(_this, _options) { // Not implemented yet } function doSSOLoginGet(_this, _options) { doPostJSONP(_this, 'sso/login/get/1', _options, ['login', 'password'], 'SSO', false); } function doSSOLogin(_this, _options) { doPostJSONP(_this, 'sso/login/cp/1', _options, ['cp_user_name', 'password', 'timezone'], 'SSO', false); } // Api call function $.fn.islonline = function (method) { if (methods[method]) { return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); } else if (typeof method === 'object' || !method) { return methods.init.apply(this, arguments); } else { $.error('Method ' + method + ' does not exist in ISL Online Account plugin'); } }; // Default options that can be overridden $.fn.islonline.defaultOptions = defaultOptions(); // Get the location of Account API var apiAccountRequest = { "type": "api", "api": "account", "version": "1", "he": "JSON" }; $.fn.islonline.apiAccountUri = 'empty'; // Get the location of SSO API var apiSSORequest = { "type": "api", "api": "sso", "version": "1", "he": "JSON" }; $.fn.islonline.apiSSOUri = 'empty'; // Function does some logic before doing actual post function doPostJSONP(_this, method, _options, userFields, apiName, executeImmediately) { // Override some sttings var methodSettings = $.extend({}, $.fn.islonline.defaultOptions, _options); if (executeImmediately) { doExecuteActualPost(_this, method, methodSettings, userFields, true, apiName); return false; } if ('undefined' == typeof (methodSettings['submit'])) { methodSettings['submit'] = _this.find('input:submit'); } // Post JSON request on submit button click if (methodSettings['submit']) { _this.submit(function () { doExecuteActualPost(_this, method, methodSettings, userFields, true, apiName); return false; }); } } // Executes actual post to API function doExecuteActualPost(_this, method, methodSettings, userFields, details, apiName) { var uri, request; // Account API if ("Account" == apiName) { uri = $.fn.islonline.apiAccountUri; request = apiAccountRequest; } else if ("SSO" == apiName) { uri = $.fn.islonline.apiSSOUri; request = apiSSORequest; } // Check if API address was set if ('empty' == uri) { //2012-04-15 DP: TODO - is it ok to go to https always? Should we go with //HOST/... $.getJSON('https://www.islonline.com/r301/?jsoncallback=?', request, function (data) { if ("Account" == apiName) { $.fn.islonline.apiAccountUri = data.link; } else if ("SSO" == apiName) { $.fn.islonline.apiSSOUri = data.link; } doExecuteActualPost(_this, method, methodSettings, userFields, details, apiName); }, 'json'); return false; } // Get mendatory fields var userData = {}; for (var i in userFields) { // If no field was passed as option, let's try and find it if (!methodSettings[userFields[i]] && _this.find('.' + userFields[i])) methodSettings[userFields[i]] = _this.find('.' + userFields[i]); // Pass the field if we can't find it if (!methodSettings[userFields[i]]) continue; methodSettings[userFields[i]].each(function () { if (('checkbox' == this.type) && (false == this.checked)) return true; // equivalent of continue if (('radio' == this.type) && (false == this.checked)) return true; // equivalent to continue if (('' == this.value) || (null == this.value)) return true; // equivalent of continue if ('object' == typeof methodSettings[userFields[i]]) { if (null == userData[userFields[i]]) userData[userFields[i]] = this.value; else { if (userData[userFields[i]] instanceof Array) userData[userFields[i]].push(this.value); else userData[userFields[i]] = new Array(userData[userFields[i]], this.value); } } else userData[userFields[i]] = this.value; }); } // Get origin if (details) userData['origin'] = getOrigin(); //console.log(userData); //return false; //console.log(uri + '?method=' + method + '&he=JSON1&'); //console.log(userData); // Send JSONP to API $.getJSON(uri + '?method=' + method + '&he=JSON1&jsoncallback=?', userData, function (data) { data.uri = uri; //console.log(data); // Call on success function if it was set if (data["response"] && (data["response"]["result"]["code"] == "OK") && (eval('typeof ' + methodSettings['onSuccess']) == 'function')) { eval(methodSettings['onSuccess'] + '(data)'); // Call in fail function if it was set } else if (data["response"] && (data["response"]["result"]["code"] != "OK") && (eval('typeof ' + methodSettings['onFail']) == 'function')) { eval(methodSettings['onFail'] + '(data)'); } }, 'json') .error(function () { // Call on error function if it was set if (methodSettings['onError'] && (eval('typeof ' + methodSettings['onError']) == 'function')) eval(methodSettings['onError'] + '(data)'); }); } // Set some origin data function getOrigin() { // Set origin origin = '{'; origin += '"appCodeName":"' + navigator.appCodeName + '",'; origin += '"appMinorVersion ":"' + navigator.appMinorVersion + '",'; origin += '"appName":"' + navigator.appName + '",'; origin += '"appVersion":"' + navigator.appVersion + '",'; origin += '"cookieEnabled":"' + navigator.cookieEnabled + '",'; origin += '"cpuClass":"' + navigator.cpuClass + '",'; origin += '"onLine":"' + navigator.onLine + '",'; origin += '"platform":"' + navigator.platform + '",'; origin += '"systemLanguage":"' + navigator.systemLanguage + '",'; origin += '"userAgent":"' + navigator.userAgent + '",'; origin += '"userLanguage":"' + navigator.userLanguage + '"'; origin += '}'; return origin; } })(jQuery);