/*
ciam_sdk.js
Author: StackStudio
Website: DISM / SDK
Updated: 11/11/2019
Last Update: Andreu Rubio
*/
/* GLOBAL VARIABLES */
var debug = false;
var config = {};
config.brand_slug = "ch";
config.default_language = "EN";
config.subscription_source = "CH_Website";
config.editable_parameters = "null";
config.environment = "production";
config.form_url = "null";
config.has_full_account_url = "https://datalayer.puig.com/ws/has-full-account";
if(("0"==true)||("0"==="true"))
{
debug = true;
}
var ciamManager = function() {
// ********** Variables **********
var account = {};
var token = null;
var anonymousUserInfo = [];
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
var screensetListener;
// ********** Constructor **********
function init()
{
if(document.head.getAttribute("languageCode"))
{
config.default_language = document.head.dataset.countrycode.toUpperCase();
}
}
// ********** Messages **********
var msg = {};
msg.success = "Success";
msg.method_already_used = "Warning: Method can't be called on the same object more than once, no listener was set";
msg.invalid_form = "Invalid form element";
msg.invalid_input = "Invalid input";
msg.no_email = "ciam_email field is required";
msg.no_password = "ciam_password field is required";
msg.wrong_callback = "callback parameter should be a function";
msg.default_error = "Unexpected error.";
msg.internal_error = "Internal error.";
msg.bad_request = "Bad request.";
msg.invalid_data_center = "Invalid data center.";
msg.forbidden = "Forbidden.";
msg.not_found = "Not found.";
msg.timeout = "Timeout.";
msg.anonymous_id_already_exists = "Anonymous ID already exists.";
msg.inactive_form = "Warning: This site hasn't got a default form implemented. Please contact with the SDK development team.";
msg.already_fullaccount = "This email already a Full Account";
// Constructor function call
init();
// ********** Private Methods **********
function setupRegistrationToken(form, cb)
{
var cb_info = function(response){
if(!response.success)
{
if(token == null)
{
// Set listener to the button
gigya.accounts.initRegistration({
callback: function(response){
if (response.errorCode == 0) {
token = response.regToken;
cb(form,token);
}else{
console.log("Error receiving registrationToken");
}
}
});
}else{
cb(form,token);
}
}else{
if(typeof form.id != "undefined")
{
console.error("Error: the form: "+form.id+" cannot be initialized as a ciam form with the user's session already started");
}else{
console.error("Error: A ciam form was initialized with the user's session already started");
}
}
};
getAccountInfo(cb_info);
}
// Public methods
function showLoginForm(_params){
if(typeof track != "undefined") track.loginRegistrationModalOpen();
return showForm("login",_params);
}
function showRegistrationForm(_params){
if(typeof track != "undefined") track.loginRegistrationModalOpen();
return showForm("register",_params);
}
function showSubscriptionForm(_params){
if(typeof track != "undefined") track.subscriptionModalOpen();
return showForm("subscribe",_params);
}
function showForgotPasswordForm(_params){
return showForm("forgotpassword",_params);
}
function showForm(_template,_params)
{
if((typeof config.form_url == "undefined")||(config.form_url == "")||(config.form_url == "null")||(config.form_url == null))
{
showGigyaRegistrationForm(_params);
return;
}
var params = {};
// if(typeof _params.redirectURL != "undefined") params.redirectURL = _params.redirectURL;
params.lang = ((typeof _params != "undefined")&&(typeof _params.lang != "undefined")) ? _params.lang : config.default_language;
params.lang = params.lang.toLowerCase();
var current_url = location.protocol + '//' + location.host + location.pathname;
if(document.getElementById('ciam_sdk_iframe_container'))
{
document.getElementById('ciam_sdk_iframe_container').remove();
}
// html_insert = "";
html_insert = "
";
document.body.insertAdjacentHTML("beforeend", html_insert);
// Create IE + others compatible event handler
window.removeEventListener(messageEvent, screensetListener, false);
screensetListener = function(e) {
// Check if origin is proper
if( e.origin != config.form_url ){ return }
var onAfterSubmitWithAnonymous = function(response){
if((typeof _params != "undefined")&&(typeof _params.onAfterSubmit != "undefined")&&(isFunction(_params.onAfterSubmit))) _params.onAfterSubmit(response);
}
if(e.data.method == "ciamCloseModal")
{
if(document.getElementById('ciam_sdk_iframe_container'))
{
document.getElementById('ciam_sdk_iframe_container').remove();
}
}
if(e.data.method == "ciamInternalError")
{
if(document.getElementById('ciam_sdk_iframe_container'))
{
console.error(e.data.response);
}
}
if(e.data.method == "ciamError")
{
if((typeof _params != "undefined")&&(typeof _params.onError != "undefined")&&(isFunction(_params.onError)))
{
_params.onError(e.data.response);
}
}
if(e.data.method == "ciamSuccess")
{
if((typeof _params != "undefined")&&(typeof _params.onSuccess != "undefined")&&(isFunction(_params.onSuccess)))
{
_params.onSuccess(e.data.response);
}
}
if(e.data.method == "ciamRegistrationSuccess")
{
if(typeof track != "undefined")
{
track.registrationSuccess();
}
if((typeof _params != "undefined")&&(typeof _params.onRegistrationSuccess != "undefined")&&(isFunction(_params.onRegistrationSuccess)))
{
_params.onRegistrationSuccess(e.data.response);
}
}
if(e.data.method == "ciamLoginSuccess")
{
if(typeof track != "undefined")
{
track.loginSuccess();
}
if((typeof _params != "undefined")&&(typeof _params.onLoginSuccess != "undefined")&&(isFunction(_params.onLoginSuccess)))
{
_params.onLoginSuccess(e.data.response);
}
}
if(e.data.method == "ciamForgotPaswordSuccess")
{
if((typeof _params != "undefined")&&(typeof _params.onForgotPasswordSuccess != "undefined")&&(isFunction(_params.onForgotPasswordSuccess)))
{
_params.onForgotPasswordSuccess(e.data.response);
}
}
if(e.data.method == "ciamRegistrationError")
{
if((typeof _params != "undefined")&&(typeof _params.onRegistrationError != "undefined")&&(isFunction(_params.onRegistrationError)))
{
_params.onRegistrationError(e.data.response);
}
}
if(e.data.method == "ciamLoginError")
{
if((typeof _params != "undefined")&&(typeof _params.onLoginError != "undefined")&&(isFunction(_params.onLoginError)))
{
_params.onLoginError(e.data.response);
}
}
if(e.data.method == "ciamForgotPaswordError")
{
if((typeof _params != "undefined")&&(typeof _params.onForgotPasswordError != "undefined")&&(isFunction(_params.onForgotPasswordError)))
{
_params.onForgotPasswordError(e.data.response);
}
}
if(e.data.method == "ciamAfterSubmit")
{
onAfterSubmitWithAnonymous(e.data.response);
}
if(e.data.method == "ciamBeforeSubmit")
{
if((typeof _params != "undefined")&&(typeof _params.onBeforeSubmit != "undefined")&&(isFunction(_params.onBeforeSubmit)))
{
_params.onBeforeSubmit(e.data.response);
}
}
if(e.data.method == "ciamBeforeScreenLoad")
{
document.getElementById('ciam_sdk_iframe').style.visibility = "visible";
if((typeof _params != "undefined")&&(typeof _params.onBeforeScreenLoad != "undefined")&&(isFunction(_params.onBeforeScreenLoad)))
{
_params.onBeforeScreenLoad(e.data.response);
}
}
if(e.data.method == "ciamAfterScreenLoad")
{
if((typeof _params != "undefined")&&(typeof _params.onAfterScreenLoad != "undefined")&&(isFunction(_params.onAfterScreenLoad)))
{
_params.onAfterScreenLoad(e.data.response);
}
}
if(e.data.method == "ciamHide")
{
if((typeof _params != "undefined")&&(typeof _params.onHide != "undefined")&&(isFunction(_params.onHide)))
{
_params.onHide(e.data.response);
}
}
};
// Listen to message from child window
eventer(messageEvent,screensetListener, false);
}
function showGigyaRegistrationForm(_params){
var params = {};
params.screenSet = 'Default-RegistrationLogin';
params.startScreen = 'gigya-register-screen';
var callback = function(response){
if(isFunction(_params.onAfterSubmit)) _params.onAfterSubmit(response);
}
if(typeof _params != "undefined"){
params.onAfterSubmit = callback;
if(isFunction(_params.onError)) params.onError = _params.onError;
if(isFunction(_params.onBeforeSubmit)) params.onBeforeSubmit = _params.onBeforeSubmit;
if(isFunction(_params.onSubmit)) params.onSubmit = _params.onSubmit;
if(isFunction(_params.onBeforeValidation)) params.onBeforeValidation = _params.onBeforeValidation;
if(isFunction(_params.onBeforeScreenLoad)) params.onBeforeScreenLoad = _params.onBeforeScreenLoad;
if(isFunction(_params.onAfterScreenLoad)) params.onAfterScreenLoad = _params.onAfterScreenLoad;
if(isFunction(_params.onFieldChanged)) params.onFieldChanged = _params.onFieldChanged;
if(isFunction(_params.onHide)) params.onHide = _params.onHide;
if(isFunction(_params.onAfterScreenLoad)) params.onAfterScreenLoad = _params.onAfterScreenLoad;
if(typeof _params.redirectURL != "undefined") params.redirectURL = _params.redirectURL;
if(typeof _params.lang != "undefined") params.lang = _params.lang;
}
gigya.accounts.showScreenSet(params);
}
// Register custom method
function register(params)
{
gigya.accounts.register(params);
}
// Login custom method
function login(params)
{
gigya.accounts.login(params);
}
// Public Login method
function publicLogin(_params)
{
var cb = _params.callback;
var params = _params;
var cbLogin = function(response)
{
var userInfo = null;
if (response.errorCode == 0)
{
if(typeof track != "undefined")
{
setAnonymousInfo(track.getAnonymousInfo());
track.loginSuccess();
}
userInfo = {UID: response.UID, profile: response.profile, data: response.data};
}
var message = response.errorDetails;
if(typeof response.validationErrors != "undefined")
{
if(message != "")
{
message += ". Errors: ";
}
response.validationErrors.forEach(function(error, index, array) {
message += error.message;
if(index+1 < array.length){
message += ", ";
}
});
}
cb(httpResponse(response.errorCode, null, message, userInfo));
}
params.callback = cbLogin;
gigya.accounts.login(params);
}
// Public Register method
function publicRegister(_params)
{
var cb = _params.callback;
var params = _params;
if(typeof params.data == "undefined")
{
params.data = {};
}
params.data.subscriptionSource = config.subscription_source;
var cbRegister = function(response)
{
var userInfo = null;
if(response.errorCode == 0)
{
if(typeof track != "undefined")
{
setAnonymousInfo(track.getAnonymousInfo());
track.registrationSuccess();
if(response.data.subscribe)
{
track.subscriptionSuccess();
}
}
userInfo = {UID: response.UID, profile: response.profile, data: response.data};
}
var message = response.errorDetails;
if(typeof response.validationErrors != "undefined")
{
if(message != "")
{
message += ". Errors: ";
}
response.validationErrors.forEach(function(error, index, array) {
message += error.message;
if(index+1 < array.length){
message += ", ";
}
});
}
cb(httpResponse(response.errorCode, null, message, userInfo));
}
var cbRegToken = function(response)
{
if (response.errorCode == 0) {
token = response.regToken;
params.regToken = token;
params.finalizeRegistration = true;
params.callback = cbRegister;
register(params);
}else{
console.log("Error receiving registrationToken");
}
}
gigya.accounts.initRegistration({"callback": cbRegToken});
}
function publicUpdate(_params)
{
var cb = _params.callback;
var params = _params;
var cbUpdate = function(response){
var message = response.errorMessage;
if(typeof response.validationErrors != "undefined")
{
if(message != "")
{
message += ". Errors: ";
}
response.validationErrors.forEach(function(error, index, array) {
message += error.message;
if(index+1 < array.length){
message += ", ";
}
});
}
cb(httpResponse(response.errorCode, null, message, null));
}
var cb_accountInfo = function(response){
if (response.success)
{
var account = response.account;
var stringEmails = account.loginIDs.emails.toString();
params.removeLoginEmails = stringEmails;
setAccount(params);
}else{
var message = response.errorDetails;
if(typeof response.validationErrors != "undefined")
{
if(message != "")
{
message += ". Errors: ";
}
response.validationErrors.forEach(function(error, index, array) {
message += error.message;
if(index+1 < array.length){
message += ", ";
}
});
}
cb(httpResponse(response.errorCode, null, message, null));
}
}
params.callback = cbUpdate;
if(typeof params.profile.email != "undefined"){
getAccountInfo(cb_accountInfo);
}else{
setAccount(params);
}
}
function subscribe(_params)
{
var cb = _params.callback;
var params = _params.data.user;
params.data.subscriptionSource = config.subscription_source;
if(typeof track != "undefined")
{
params.data.anonymousUserID = track.getAnonymousInfo();
}
// SUBSCRIBE TRUE IF NOT EXIST
if(typeof params.data.subscribe == "undefined")
{
params.data.subscribe = true;
params.data.subscriptionStatus = "pending";
}
if(typeof params.data.subscriptionStatus == "undefined")
{
params.data.subscriptionStatus = "pending";
}
var cbSubscribe = function(response)
{
var userInfo = null;
if(response.errorCode == 0)
{
if(typeof track != "undefined")
{
if(response.requestParams.data.subscribe)
{
track.subscriptionSuccess();
}
}
userInfo = getUserInfoFromResponse(response);
}
var message = getMessageFromResponse(response);
cb(httpResponse(response.errorCode, null, message, userInfo));
}
var cbRegToken = function(response)
{
if (response.errorCode == 0) {
token = response.regToken;
params.regToken = token;
params.finalizeRegistration = true;
params.callback = cbSubscribe;
gigya.accounts.setAccountInfo(params);
}else{
console.log("Error receiving registrationToken");
}
}
gigya.accounts.initRegistration({"isLite": true, "callback": cbRegToken});
}
function createLiteAccount(_params)
{
var paramsAux = _params;
var cb = _params.callback;
var params = _params.data.user;
params.data.subscriptionSource = config.subscription_source;
if(typeof track != "undefined")
{
params.data.anonymousUserID = track.getAnonymousInfo();
}
if(typeof params.data.subscribe != "undefined" && params.data.subscribe)
{
params.data.subscriptionStatus = "pending";
}
var cbLiteAccount = function(response)
{
var userInfo = null;
if(response.errorCode == 0)
{
if(typeof track != "undefined")
{
if(response.requestParams.data.subscribe)
{
track.subscriptionSuccess();
}
}
userInfo = getUserInfoFromResponse(response);
}
var message = getMessageFromResponse(response);
cb(httpResponse(response.errorCode, null, message, userInfo));
}
var cbRegToken = function(response)
{
if (response.errorCode == 0) {
token = response.regToken;
params.regToken = token;
params.finalizeRegistration = true;
params.callback = cbLiteAccount;
gigya.accounts.setAccountInfo(params);
}else{
console.log("Error receiving registrationToken");
}
}
paramsAux.callback = function(response)
{
if(response.success)
{
if(!response.data.hasFullAccount)
{
gigya.accounts.initRegistration({"isLite": true, "callback": cbRegToken});
}else{
cb(httpResponse(400, null, response.message, null));
}
}
}
hasFullAccount(paramsAux);
}
function hasFullAccount(params)
{
params.data.brand = config.brand_slug;
var data = JSON.stringify(params.data);
var xhr = new XMLHttpRequest();
xhr.withCredentials = false;
xhr.onreadystatechange = function() {
var response = {};
if (xhr.readyState == XMLHttpRequest.DONE) {
if(xhr.status == 200){
if(typeof xhr.response != "undefined")
{
response = JSON.parse(xhr.response);
}
response.success = true;
}else{
response.success = false;
response.message = msg.internal_error;
}
if(isFunction(params.callback))params.callback(response);
}
}
xhr.open("POST", config.has_full_account_url);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(data);
}
// Reset password custom method
function resetPassword(params)
{
gigya.accounts.resetPassword(params);
}
//Ciam exclusive use
function setAccount(params)
{
params.muteWebhooks = true;
gigya.accounts.setAccountInfo(params);
}
//Set Account Info custom method to developer
function setAccountInfo(params)
{
var push_allowed = true;
//Check if param is set properly
if(!config.editable_parameters.includes('@@') && config.editable_parameters != "")
{
var allowed_parameters = config.editable_parameters.split(",");
if(typeof params.data != "undefined")
{
var dev_parameters = Object.keys(params.data);
for(var i=0;i 0){
var cb_anonymousId = function(response){
var anonymousUserID = [];
if((typeof response.data != "undefined")&&(typeof response.data.anonymousUserID != "undefined"))
{
var anonymousUserID = response.data.anonymousUserID;
}
var anonymousUser_to_push = [];
var error = false;
if(response.errorCode == 0){
var pushable = true;
if(anonymousUserID.length > 0){
_arrayAnonymous.forEach(function(array_element){
var found = false;
anonymousUserID.forEach(function(gigya_element){
if((typeof array_element.id != "undefined") && (typeof array_element.source != "undefined")){
if(gigya_element.id == array_element.id){
found = true;
}
}else{
error = true;
}
});
if(!found){
anonymousUser_to_push.push({"id": array_element.id,"source": array_element.source });
}
});
}else{
anonymousUser_to_push = _arrayAnonymous;
}
if(!error){
if(anonymousUser_to_push.length > 0){
anonymousUser_to_push.forEach(function(element){
anonymousUserID.push(element);
});
var data = {};
data.anonymousUserID = anonymousUserID;
var params = {
data: data,
muteWebhooks: true,
}
gigya.ids.setAccountInfo(params);
}else{
var result = {"success": false, "message":msg.anonymous_id_already_exists};
}
}else{
console.log(msg.internal_error);
}
}else{
if((typeof response.errorCode != "undefined")&&(response.errorCode != 403005)&&(typeof response.errorMessage != "undefined"))
{
debug(response.errorMessage,"staging");
}
}
}
gigya.accounts.getAccountInfo({ callback: cb_anonymousId });
}else{
debug("anonymousUserInfo empty","staging");
}
}
function syncAnonymousUserInfo(_arrayAnonymous){
if(typeof _arrayAnonymous != 'undefined' && _arrayAnonymous != null)
{
anonymousUserInfo = _arrayAnonymous;
}else{
console.log('Empty array');
}
// if((typeof _id != "undefined" && _id != null) && (typeof _source != "undefined" && _source != null)){
// var anonymousUser = {id: _id, source: _source};
// anonymousUserInfo.push(anonymousUser);
// console.log(anonymousUserInfo);
// }else{
// console.log("At least 1 value is undefined");
// }
}
// Social login custom method
function setSocialListener(params){
gigya.accounts.socialLogin(params);
}
function getAccountInfo(account_info_callback)
{
var cb = function(result)
{
var response = {"success":true,"message":msg.success,"account":{}};
if ( result.errorCode == 0 ) {
// Identifier
response.account.UID = result["UID"];
response.account.UIDSignature = result["UIDSignature"];
response.account.signatureTimestamp = result["signatureTimestamp"];
// Utils
response.account.isVerified = result["isVerified"];
response.account.isRegistered = result["isRegistered"];
response.account.isActive = result["isActive"];
response.account.lastLogin = result["lastLoginTimestamp"];
response.account.lastUpdated = result["lastUpdatedTimestamp"];
response.account.registered = result["registeredTimestamp"];
response.account.socialProviders = result["socialProviders"];
response.account.loginIDs = result["loginIDs"];
// User data
response.account.data = new Object();
response.account.profile = new Object();
response.account.subscriptions = new Object();
response.account.data = result["data"];
response.account.profile = result['profile'];
response.account.subscriptions = result['subscriptions'];
}
else {
response.success = false;
if(typeof result.errorMessage != "undefined")
{
response.message = result.errorMessage;
}else{
response.message = msg.default_error;
}
}
if(!isFunction(account_info_callback))
{
response.success = false;
response.message = msg.invalid_input;
}else{
account_info_callback(response);
}
}
gigya.accounts.getAccountInfo({include:"loginIDs, emails, profile, data, subscriptions, preferences", extraProfileFields:"address,phones, languages", callback: cb });
}
function loginForm(form, callback)
{
var response = {"success":true,"message":msg.success};
// Variable declaration
var email = null;
var password = null;
try {
if((typeof form != "object")||(form == null))
{
response.success = false;
response.message = " "+msg.invalid_form;
}else{
if(typeof form.elements == "undefined")
{
response.success = false;
response.message = " "+msg.invalid_form;
}else{
// Check form format
if((typeof form.elements["ciam_email"] == "undefined")||(form.elements["ciam_email"] == null))
{
response.success = false;
response.message += " "+msg.no_email;
}else{
email = form.elements["ciam_email"];
}
if((typeof form.elements["ciam_password"] == "undefined")||(form.elements["ciam_password"] == null))
{
response.success = false;
response.message += " "+msg.no_password;
}else{
password = form.elements["ciam_password"];
}
}
// Check callback parameter
if(!isFunction(callback))
{
response.success = false;
response.message += " "+msg.wrong_callback;
}
// Proceed if parameters are correct.
if(response.success)
{
// Check if method has already been used.
if(form.used == true)
{
response.message = " "+msg.method_already_used;
}else
{
// Set listener to the button
form.addEventListener("submit", function(event){
event.preventDefault();
var recaptcha_token = null;
if( (typeof(form.elements["ciam_captcha_token"]) != "undefined") && (typeof (form.elements["ciam_captcha_token"].value) != "undefined") && (form.elements["ciam_captcha_token"].value != null) )
{
recaptcha_token = form.elements["ciam_captcha_token"].value;
}
// Get parameter values from form
var email = form.elements["ciam_email"].value;
var password = form.elements["ciam_password"].value;
var cb_login = function(result){
if (result.errorCode == 0) {
if(typeof track != "undefined")
{
setAnonymousInfo(track.getAnonymousInfo());
track.loginSuccess();
}
var responseResult = {UID: result.UID, profile: result.profile, data: result.data};
var response = {"success":true,"message":msg.success, "result": responseResult};
callback(response);
}else{
// Throw error
var message = result.errorDetails;
var response = {"success":false,"message":message,"errorCode":result.errorCode};
if(typeof result.validationErrors != "undefined")
{
var errors = "";
result.validationErrors.forEach(function(error, index, array) {
errors += error.message;
if(index+1 < array.length){
errors += ", ";
}
});
response.errors = errors;
}
// Throw error
callback(response);
}
}
var params = {
loginID: email,
password: password,
callback: cb_login
}
if(typeof recaptcha_token != "undefined" && recaptcha_token != null)
{
params.captchaToken = recaptcha_token;
}
login(params);
});
form.used = true;
}
}
}
}
catch(err) {
response.success = false;
response.message += " "+en.default_error;
}
return response;
}
function resetPasswordForm(form, callback)
{
var response = {"success":true,"message":msg.success};
// Variable declaration
var email = null;
var password = null;
try {
if((typeof form != "object")||(form == null))
{
response.success = false;
response.message += " "+msg.invalid_form;
}else{
if(typeof form.elements == "undefined")
{
response.success = false;
response.message += " "+msg.invalid_form;
}else{
// Check form format
if((typeof form.elements["ciam_email"] == "undefined")||(form.elements["ciam_email"] == null))
{
response.success = false;
response.message += " "+msg.no_email;
}else{
email = form.elements["ciam_email"];
}
}
// Check callback parameter
if(!isFunction(callback))
{
response.success = false;
response.message += " "+msg.wrong_callback;
}
// Proceed if parameters are correct.
if(response.success)
{
// Check if method has already been used.
if(form.used == true)
{
response.message = " "+msg.method_already_used;
}else
{
// Set listener to the button
form.addEventListener("submit", function(event){
event.preventDefault();
// Get parameter values from form
var email = form.elements["ciam_email"].value;
var cb_reset_password = function(result){
if (result.errorCode== 0) {
var response = {"success":true,"message":msg.success};
callback(response);
}else{
var message = result.errorDetails;
var response = {"success":false,"message":message,"errorCode":result.errorCode};
if(typeof result.validationErrors != "undefined")
{
var errors = "";
result.validationErrors.forEach(function(error, index, array) {
errors += error.message;
if(index+1 < array.length){
errors += ", ";
}
});
response.errors = errors;
}
// Throw error
callback(response);
}
}
var params = {
loginID: email,
callback: cb_reset_password,
lang: config.default_language
}
resetPassword(params);
});
form.used = true;
}
}
}
}
catch(err) {
response.success = false;
response.message += " "+en.default_error;
}
return response;
}
function registrationForm(form,callback)
{
var response = {"success":true,"message":msg.success};
// Variable declaration
var email = null;
var password = null;
try{
if((typeof form != "object")||(form == null))
{
response.success = false;
response.message += " "+msg.invalid_form;
}else{
if(typeof form.elements == "undefined")
{
response.success = false;
response.message += " "+msg.invalid_form;
}else{
// Check form format
if((typeof form.elements["ciam_email"] == "undefined")||(form.elements["ciam_email"] == null))
{
response.success = false;
response.message += " "+msg.no_email;
}else{
email = form.elements["ciam_email"];
}
if((typeof form.elements["ciam_password"] == "undefined")||(form.elements["ciam_password"] == null))
{
response.success = false;
response.message += " "+msg.no_password;
}else{
password = form.elements["ciam_password"];
}
}
// Check callback parameter
if(!isFunction(callback))
{
response.success = false;
response.message += " "+msg.wrong_callback;
}
// Proceed if parameters are correct.
if(response.success)
{
// Check if method has already been used.
if(form.used == true)
{
response.message = " "+msg.method_already_used;
}else
{
var regTokenCb = function(form,token){
form.addEventListener("submit", function(event){
event.preventDefault();
var data = {};
var profile = objectProfile(form);
var subscriptions = {};
data.subscriptionSource = config.subscription_source;
var recaptcha_token = null;
if(form.querySelector('[name="ciam_captcha_token"]')) var recaptcha_token = form.querySelector('[name="ciam_captcha_token"]').value;
if(form.querySelector('[name="ciam_password"]')) var password = form.querySelector('[name="ciam_password"]').value;
if(form.querySelector('[name="ciam_terms"]')) data.terms = form.querySelector('[name="ciam_terms"]').checked;
if(form.querySelector('[name="ciam_subscribe"]')) data.subscribe = form.querySelector('[name="ciam_subscribe"]').checked;
if(form.querySelector('[name="ciam_ecommerce_titleCode"]')){
data.ecommerce = {};
data.ecommerce.profile = {};
data.ecommerce.profile.titleCode = form.querySelector('[name="ciam_ecommerce_titleCode"]').value;
}
if(typeof data.subscribe != "undefined" && data.subscribe)
{
data.subscriptionStatus = "pending";
}
if(form.querySelector('[name="ciam_email"]'))
{
var email = form.querySelector('[name="ciam_email"]').value
}
if((form.querySelector('[name="ciam_subscribe"]') )&&(form.querySelector('[name="ciam_subscribe"]').checked))
{
var preferences_flag = true;
var c = 0;
while(preferences_flag && c < 10)
{
if(form.querySelector('[name="ciam_preferences['+c+']"]'))
{
subscriptions[form.querySelector('[name="ciam_preferences['+c+']"]').value] = {};
subscriptions[form.querySelector('[name="ciam_preferences['+c+']"]').value].email = {};
subscriptions[form.querySelector('[name="ciam_preferences['+c+']"]').value].email.isSubscribed = form.querySelector('[name="ciam_preferences['+c+']"]').checked;
}else{
preferences_flag = false;
}
c++;
}
}
var cb_register = function(result){
if (result.errorCode== 0) {
if(typeof track != "undefined")
{
setAnonymousInfo(track.getAnonymousInfo());
track.registrationSuccess();
if(result.data.subscribe)
{
track.subscriptionSuccess();
}
}
var responseResult = {UID: result.UID, profile: result.profile, data: result.data};
var response = {"success":true,"message":msg.success, "result": responseResult};
callback(response);
}else{
var message = result.errorDetails;
var response = {"success":false,"message":message,"errorCode":result.errorCode};
if(typeof result.validationErrors != "undefined")
{
var errors = "";
result.validationErrors.forEach(function(error, index, array) {
errors += error.message;
if(index+1 < array.length){
errors += ", ";
}
});
response.errors = errors;
}
// Throw error
callback(response);
}
};
var params = {
email: email,
password: password,
profile: profile,
data:data,
subscriptions: subscriptions,
regToken: token,
finalizeRegistration: true,
lang: config.default_language,
callback: cb_register
}
if(typeof recaptcha_token != "undefined" && recaptcha_token != null)
{
params.captchaToken = recaptcha_token;
}
register(params);
});
form.used = true;
}
setupRegistrationToken(form,regTokenCb);
}
}
}
}
catch(err) {
response.success = false;
response.message += " "+msg.default_error;
}
return response;
}
function profileForm(form,callback,_autofill,_no_session_started_callback)
{
var response = {"success":true,"message":msg.success};
// Variable declaration
var email = null;
var password = null;
try{
if((typeof form != "object")||(form == null))
{
response.success = false;
response.message += " "+msg.invalid_form;
}else{
if(typeof form.elements == "undefined")
{
response.success = false;
response.message += " "+msg.invalid_form;
}
// Check callback parameter
if(!isFunction(callback))
{
response.success = false;
response.message += " "+msg.wrong_callback;
}
// Proceed if parameters are correct.
if(response.success)
{
// Check if method has already been used.
if(form.used == true)
{
response.message = " "+msg.method_already_used;
}else
{
form.addEventListener("submit", function(event){
event.preventDefault();
var data = {};
var profile = objectProfile(form);
var subscriptions = {};
if((form.querySelector('[name="ciam_email"]'))&&(notEmptyValue(form.querySelector('[name="ciam_email"]').value))) profile.email = form.querySelector('[name="ciam_email"]').value;
if((form.querySelector('[name="ciam_password"]'))&&(notEmptyValue(form.querySelector('[name="ciam_password"]').value))) var password = form.querySelector('[name="ciam_password"]').value;
if((form.querySelector('[name="ciam_newPassword"]'))&&(notEmptyValue(form.querySelector('[name="ciam_newPassword"]').value))) var newPassword = form.querySelector('[name="ciam_newPassword"]').value;
if(form.querySelector('[name="ciam_subscribe"]')) data.subscribe = form.querySelector('[name="ciam_subscribe"]').checked;
if(form.querySelector('[name="ciam_ecommerce_titleCode"]')){
data.ecommerce = {};
data.ecommerce.profile = {};
data.ecommerce.profile.titleCode = form.querySelector('[name="ciam_ecommerce_titleCode"]').value;
}
if(typeof data.subscribe != "undefined" && data.subscribe)
{
data.subscriptionStatus = "pending";
}
if((form.querySelector('[name="ciam_subscribe"]'))&&(form.querySelector('[name="ciam_subscribe"]').checked))
{
var preferences_flag = true;
var c = 0;
while(preferences_flag && c < 10)
{
if(form.querySelector('[name="ciam_preferences['+c+']"]'))
{
subscriptions[form.querySelector('[name="ciam_preferences['+c+']"]').value] = {};
subscriptions[form.querySelector('[name="ciam_preferences['+c+']"]').value].email = {};
subscriptions[form.querySelector('[name="ciam_preferences['+c+']"]').value].email.isSubscribed = form.querySelector('[name="ciam_preferences['+c+']"]').checked;
}else{
preferences_flag = false;
}
c++;
}
}
var params = {};
if(typeof password != "undefined") params.password = password;
if(typeof newPassword != "undefined") params.newPassword = newPassword;
params.profile = profile;
params.data = data;
params.subscriptions = subscriptions;
var cb_accountInfo = function(result_1){
if (result_1.success) {
var account = result_1.account;
//WE WILL REMOVE OLD EMAIL FROM EMAIL ARRAY
if(typeof profile.email != "undefined")
{
var stringEmails = account.loginIDs.emails.toString();
params.removeLoginEmails = stringEmails;
}
var cb_setAccountInfo = function(result_2){
if (result_2.errorCode == 0) {
var cb_accountInfo_last = function(result_3){
if (result_3.success) {
var responseResult = {UID: result_3.account.UID, profile: result_3.account.profile, data: result_3.account.data};
var response = {"success":true,"message":msg.success, "result": responseResult};
callback(response);
}else{
var response = {"success":false,"message":result_3.errorDetails,"errorCode":result_3.errorCode};
callback(response);
}
}
getAccountInfo(cb_accountInfo_last);
}else{
// Throw error
var response = {"success":false,"message":result_2.errorDetails,"errorCode":result_2.errorCode};
callback(response);
}
}
params.callback = cb_setAccountInfo;
setAccount(params);
}else{
var response = {"success":false,"message":result_1.errorDetails,"errorCode":result_1.errorCode};
callback(response);
}
}
getAccountInfo(cb_accountInfo);
});
form.used = true;
}
}
}
if(typeof _autofill != "undefined")
{
if(_autofill)
{
var get_user_info_cb = function(result_autofill)
{
if(result_autofill.success)
{
var form_elements = form.elements;
// SET EMAIL
if(typeof result_autofill.account.profile.email != "undefined")
{
form_elements["ciam_email"].value = result_autofill.account.profile.email;
}
// SET FIRST NAME
if(typeof result_autofill.account.profile.firstName != "undefined")
{
form_elements["ciam_firstname"].value = result_autofill.account.profile.firstName;
}
// SET LAST NAME
if(typeof result_autofill.account.profile.lastName != "undefined")
{
form_elements["ciam_lastname"].value = result_autofill.account.profile.lastName;
}
// SET GENDER
if(typeof result_autofill.account.profile.gender != "undefined")
{
form_elements["ciam_gender"].value = result_autofill.account.profile.gender;
}
// SET COUNTRY
if(typeof result_autofill.account.profile.country != "undefined")
{
form_elements["ciam_country"].value = result_autofill.account.profile.country;
}
// SET STATE
if(typeof result_autofill.account.profile.state != "undefined")
{
form_elements["ciam_state"].value = result_autofill.account.profile.state;
}
// SET BIRTHDATE
if(typeof result_autofill.account.profile.birthDay != "undefined" &&
typeof result_autofill.account.profile.birthMonth != "undefined" &&
typeof result_autofill.account.profile.birthYear != "undefined")
{
form_elements["ciam_birthdate"].value = ('0' + result_autofill.account.profile.birthDay).slice(-2) + "/"+('0' + result_autofill.account.profile.birthMonth).slice(-2)+"/"+('0' + result_autofill.account.profile.birthYear).slice(-2);
}
// SET SUBSCRIBE
if(result_autofill.account.data.subscribe == true)
{
form_elements["ciam_subscribe"].checked = true;
}
// SET PHONES
if((typeof result_autofill.account.profile.phones != "undefined")&&(!Array.isArray(result_autofill.account.profile.phones))&&(typeof result_autofill.account.profile.phones.number != "undefined"))
{
form_elements["ciam_phone"].value = result_autofill.account.profile.phones.number;
}else if((typeof result_autofill.account.profile.phones != "undefined")&&(Array.isArray(result_autofill.account.profile.phones))&&(typeof result_autofill.account.profile.phones[0].number != "undefined"))
{
form_elements["ciam_phone"].value = result_autofill.account.profile.phones[0].number;
}
// SET SUBSCRIPTIONS
if(typeof result_autofill.account.profile.languages != "undefined")
{
languages_aux = result_autofill.account.profile.languages.split(",");
form_elements["ciam_language"].value = languages_aux[0];
}
if(typeof result_autofill.account.subscriptions != "undefined")
{
var subscription_keys = Object.keys(result_autofill.account.subscriptions);
for(var h = 0; h < subscription_keys.length ; h++)
{
var autofill_preferences_flag = true;
var autofill_u = 0;
//El bucle és amb un tope de 4 per evitar loop infinit si no en troba.
while(autofill_preferences_flag && autofill_u < 10)
{
if(typeof form_elements["ciam_preferences["+autofill_u+"]"] != "undefined")
{
if(form_elements["ciam_preferences["+autofill_u+"]"].value == subscription_keys[h])
{
form_elements["ciam_preferences["+autofill_u+"]"].checked = result_autofill.account.subscriptions[subscription_keys[h]].email.isSubscribed;
}
}
autofill_u++;
}
}
}
}else{
console.log("Can't autofill fields: User is not logged in");
_no_session_started_callback();
}
};
getAccountInfo(get_user_info_cb);
}
}
}
catch(err) {
response.success = false;
response.message += " "+msg.default_error;
}
return response;
}
function changePasswordForm(form, callback)
{
var response = {"success":true,"message":msg.success};
// Variable declaration
var newPassword = null;
var password = null;
try{
if((typeof form != "object")||(form == null))
{
response.success = false;
response.message += " "+msg.invalid_form;
}else{
if(typeof form.elements == "undefined")
{
response.success = false;
response.message += " "+msg.invalid_form;
}else{
// Check form format
if((typeof form.elements["ciam_password"] == "undefined")||(form.elements["ciam_password"] == null))
{
response.success = false;
response.message += " "+msg.no_password;
}
if((typeof form.elements["ciam_newPassword"] == "undefined")||(form.elements["ciam_newPassword"] == null))
{
response.success = false;
response.message += " "+msg.no_password;
}
}
// Check callback parameter
if(!isFunction(callback))
{
response.success = false;
response.message += " "+msg.wrong_callback;
}
// Proceed if parameters are correct.
if(response.success)
{
// Check if method has already been used.
if(form.used == true)
{
response.message = " "+msg.method_already_used;
}else
{
form.addEventListener("submit", function(event){
event.preventDefault();
if((form.querySelector('[name="ciam_newPassword"]'))&&(notEmptyValue(form.querySelector('[name="ciam_newPassword"]').value))) var ciam_newPassword = form.querySelector('[name="ciam_newPassword"]').value;
if((form.querySelector('[name="ciam_password"]'))&&(notEmptyValue(form.querySelector('[name="ciam_password"]').value))) var ciam_password = form.querySelector('[name="ciam_password"]').value;
var cb_changePassword = function(result){
if (result.errorCode == 0) {
var response = {"success":true,"message":msg.success};
callback(response);
}else{
// Throw error
var response = {"success":false,"message":result.errorDetails,"errorCode":result.errorCode};
callback(response);
}
}
var params = {
password:ciam_password,
newPassword:ciam_newPassword,
callback: cb_changePassword
}
setAccount(params);
});
form.used = true;
}
}
}
}
catch(err) {
response.success = false;
response.message += " "+msg.default_error;
}
return response;
}
function changePasswordFromEmailForm(form, callback)
{
var response = {"success":true,"message":msg.success};
// Variable declaration
var newPassword = null;
try{
if((typeof form != "object")||(form == null))
{
response.success = false;
response.message += " "+msg.invalid_form;
}else{
if(typeof form.elements == "undefined")
{
response.success = false;
response.message += " "+msg.invalid_form;
}else{
// Check form format
if((typeof form.elements["ciam_newPassword"] == "undefined")||(form.elements["ciam_newPassword"] == null))
{
response.success = false;
response.message += " "+msg.no_password;
}
}
var url_string = window.location.href
var url = new URL(url_string);
var passwordResetToken = url.searchParams.get("pwrt");
if(passwordResetToken == "")
{
response.success = false;
response.message += " "+msg.invalid_form;
}
// Check callback parameter
if(!isFunction(callback))
{
response.success = false;
response.message += " "+msg.wrong_callback;
}
// Proceed if parameters are correct.
if(response.success)
{
// Check if method has already been used.
if(form.used == true)
{
response.message = " "+msg.method_already_used;
}else
{
form.addEventListener("submit", function(event){
event.preventDefault();
if((form.querySelector('[name="ciam_newPassword"]'))&&(notEmptyValue(form.querySelector('[name="ciam_newPassword"]').value))){
var ciam_newPassword = form.querySelector('[name="ciam_newPassword"]').value;
}
var cb_changePassword = function(result){
if (result.errorCode == 0) {
var response = {"success":true,"message":msg.success};
callback(response);
}else{
// Throw error
var response = {"success":false,"message":result.errorDetails,"errorCode":result.errorCode};
callback(response);
}
}
var params = {
newPassword: ciam_newPassword,
passwordResetToken: passwordResetToken,
callback: cb_changePassword
}
gigya.accounts.resetPassword(params);
});
form.used = true;
}
}
}
}
catch(err) {
response.success = false;
response.message += " "+msg.default_error;
}
return response;
}
function subscriptionForm(form,callback)
{
var response = {"success":true,"message":msg.success};
// Variable declaration
var email = null;
try{
if((typeof form != "object")||(form == null))
{
response.success = false;
response.message += " "+msg.invalid_form;
}else{
if(typeof form.elements == "undefined")
{
response.success = false;
response.message += " "+msg.invalid_form;
}else{
// Check form format
if((typeof form.elements["ciam_email"] == "undefined")||(form.elements["ciam_email"] == null))
{
response.success = false;
response.message += " "+msg.no_email;
}else{
email = form.elements["ciam_email"];
}
}
// Check callback parameter
if(!isFunction(callback))
{
response.success = false;
response.message += " "+msg.wrong_callback;
}
// Proceed if parameters are correct.
if(response.success)
{
// Check if method has already been used.
if(form.used == true)
{
response.message = " "+msg.method_already_used;
}else
{
form.addEventListener("submit", function(event){
event.preventDefault();
var data = {};
var profile = {};
var subscriptions = {};
data.subscriptionSource = config.subscription_source;
profile = objectProfile(form);
if(form.querySelector('[name="ciam_email"]')) profile.email = form.querySelector('[name="ciam_email"]').value;
// Validació camps opcionals here!
if(form.querySelector('[name="ciam_terms"]'))
{
data.terms = form.querySelector('[name="ciam_terms"]').checked;
}else{
data.terms = true;
}
if(form.querySelector('[name="ciam_subscribe"]'))
{
data.subscribe = form.querySelector('[name="ciam_subscribe"]').checked;
}else{
data.subscribe = true;
}
if(data.subscribe)
{
data.subscriptionStatus = "pending";
}
var preferences_flag = true;
var c = 0;
while(preferences_flag && c < 10)
{
if(form.querySelector('[name="ciam_preferences['+c+']"]'))
{
subscriptions[form.querySelector('[name="ciam_preferences['+c+']"]').value] = {};
subscriptions[form.querySelector('[name="ciam_preferences['+c+']"]').value].email = {};
subscriptions[form.querySelector('[name="ciam_preferences['+c+']"]').value].email.isSubscribed = form.querySelector('[name="ciam_preferences['+c+']"]').checked;
}else{
preferences_flag = false;
}
c++;
}
var user = {
profile: profile,
data: data,
}
if(Object.keys(subscriptions).length > 0)
{
user.subscriptions = subscriptions;
}
var params_data = {
user: user,
brand: config.brand_slug
}
var params = {};
params.data = params_data;
params.callback = callback;
subscribe(params);
});
form.used = true;
}
}
}
}
catch(err) {
response.success = false;
response.message += " "+msg.default_error;
}
return response;
}
function liteAccountForm(form,callback)
{
var response = {"success":true,"message":msg.success};
// Variable declaration
var email = null;
try{
if((typeof form != "object")||(form == null))
{
response.success = false;
response.message += " "+msg.invalid_form;
}else{
if(typeof form.elements == "undefined")
{
response.success = false;
response.message += " "+msg.invalid_form;
}else{
// Check form format
if((typeof form.elements["ciam_email"] == "undefined")||(form.elements["ciam_email"] == null))
{
response.success = false;
response.message += " "+msg.no_email;
}else{
email = form.elements["ciam_email"];
}
}
// Check callback parameter
if(!isFunction(callback))
{
response.success = false;
response.message += " "+msg.wrong_callback;
}
// Proceed if parameters are correct.
if(response.success)
{
// Check if method has already been used.
if(form.used == true)
{
response.message = " "+msg.method_already_used;
}else
{
form.addEventListener("submit", function(event){
event.preventDefault();
var data = {};
var profile = {};
var subscriptions = {};
data.subscriptionSource = config.subscription_source;
profile = objectProfile(form);
if(form.querySelector('[name="ciam_email"]')) profile.email = form.querySelector('[name="ciam_email"]').value;
// Validació camps opcionals here!
if(form.querySelector('[name="ciam_terms"]'))
{
data.terms = form.querySelector('[name="ciam_terms"]').checked;
}else{
data.terms = true;
}
if(form.querySelector('[name="ciam_subscribe"]'))
{
data.subscribe = form.querySelector('[name="ciam_subscribe"]').checked;
}
if(data.subscribe)
{
data.subscriptionStatus = "pending";
}
var preferences_flag = true;
var c = 0;
while(preferences_flag && c < 10)
{
if(form.querySelector('[name="ciam_preferences['+c+']"]'))
{
subscriptions[form.querySelector('[name="ciam_preferences['+c+']"]').value] = {};
subscriptions[form.querySelector('[name="ciam_preferences['+c+']"]').value].email = {};
subscriptions[form.querySelector('[name="ciam_preferences['+c+']"]').value].email.isSubscribed = form.querySelector('[name="ciam_preferences['+c+']"]').checked;
}else{
preferences_flag = false;
}
c++;
}
var user = {
profile: profile,
data: data
}
if(Object.keys(subscriptions).length > 0)
{
user.subscriptions = subscriptions;
}
var params_data = {
user: user
}
var params = {};
params.data = params_data;
params.callback = callback;
createLiteAccount(params);
});
form.used = true;
}
}
}
}
catch(err) {
response.success = false;
response.message += " "+msg.default_error;
}
return response;
}
function socialForm(form, callback){
var response = {"success":true,"message":msg.success};
try {
if((typeof form != "object")||(form == null))
{
response.success = false;
response.message += " "+msg.invalid_form;
}else{
var elementFacebook = form.querySelector('.ciam_facebook');
var elementInstagram = form.querySelector('.ciam_instagram');
var elementGoogle = form.querySelector('.ciam_google');
if( (typeof elementFacebook == "undefined" || elementFacebook == null) &&
(typeof elementInstagram == "undefined" || elementInstagram == null) &&
(typeof elementGoogle == "undefined" || elementGoogle == null))
{
response.success = false;
response.message += " "+msg.invalid_form;
}else{
if(elementFacebook){
elementFacebook.addEventListener("click", function(event){
event.preventDefault();
if(typeof track != "undefined")track.loginRegistrationModalOpen();
var cb_facebook = function(cb_facebook_result){
if (cb_facebook_result.errorCode == 0) {
if(typeof track != "undefined")track.registrationSuccess();
var cb_getAccount = function(response)
{
var responseResult = {UID: response.account.UID, profile: response.account.profile, data: response.account.data};
if(typeof response.account.data == "undefined")
{
response.account.data = {};
}
if(typeof response.account.data.subscriptionSource == "undefined")
{
var data = {};
data.subscriptionSource = config.subscription_source;
data.terms = true;
var cb_social = function(cb_social_result){
responseResult.data.subscriptionSource = config.subscription_source;
responseResult.data.terms = true;
if (cb_social_result.errorCode == 0) {
var response = {"success":true,"message":msg.success, "result": responseResult};
callback(response);
}else{
// Throw error
var response = {"success":false,"message":cb_social_result.errorDetails,"errorCode":cb_social_result.errorCode};
callback(response);
}
}
var params = {
data:data,
callback: cb_social
}
setAccount(params);
}else{
var response = {"success":true,"message":msg.success, "result": responseResult};
callback(response);
}
}
getAccountInfo(cb_getAccount);
}else{
// Throw error
var response = {"success":false,"message":cb_facebook_result.errorDetails,"errorCode":cb_facebook_result.errorCode};
callback(response);
}
}
var params = {
provider: 'facebook',
callback: cb_facebook
}
setSocialListener(params);
});
}
if(elementInstagram){
elementInstagram.addEventListener("click", function(event){
event.preventDefault();
if(typeof track != "undefined")track.loginRegistrationModalOpen();
var cb_instagram = function(cb_instagram_result){
if (cb_instagram_result.errorCode == 0) {
if(typeof track != "undefined")track.registrationSuccess();
var cb_getAccount = function(response)
{
var responseResult = {UID: response.account.UID, profile: response.account.profile, data: response.account.data};
if(typeof response.account.data == "undefined")
{
response.account.data = {};
}
if(typeof response.account.data.subscriptionSource == "undefined")
{
var data = {};
data.subscriptionSource = config.subscription_source;
data.terms = true;
var cb_social = function(cb_social_result){
if (cb_social_result.errorCode == 0) {
responseResult.data.subscriptionSource = config.subscription_source;
responseResult.data.terms = true;
var response = {"success":true,"message":msg.success, "result": responseResult};
callback(response);
}else{
// Throw error
var response = {"success":false,"message":cb_social_result.errorDetails,"errorCode":cb_social_result.errorCode};
callback(response);
}
}
var params = {
data:data,
callback: cb_social
}
setAccount(params);
}else{
var response = {"success":true,"message":msg.success, "result": responseResult};
callback(response);
}
}
getAccountInfo(cb_getAccount);
}else{
// Throw error
var response = {"success":false,"message":cb_instagram_result.errorDetails,"errorCode":cb_instagram_result.errorCode,"gigyaResponse":cb_instagram_result};
callback(response);
}
}
var params = {
provider: 'instagram',
callback: cb_instagram
}
setSocialListener(params);
});
}
if(elementGoogle){
elementGoogle.addEventListener("click", function(event){
event.preventDefault();
if(typeof track != "undefined")track.loginRegistrationModalOpen();
var cb_google = function(cb_google_result){
if (cb_google_result.errorCode == 0) {
if(typeof track != "undefined")track.registrationSuccess();
var cb_getAccount = function(response)
{
var responseResult = {UID: response.account.UID, profile: response.account.profile, data: response.account.data};
if(typeof response.account.data == "undefined")
{
response.account.data = {};
}
if(typeof response.account.data.subscriptionSource == "undefined")
{
var data = {};
data.subscriptionSource = config.subscription_source;
data.terms = true;
var cb_social = function(cb_social_result){
responseResult.data.subscriptionSource = config.subscription_source;
responseResult.data.terms = true;
if (cb_social_result.errorCode == 0) {
var response = {"success":true,"message":msg.success, "result": responseResult};
callback(response);
}else{
// Throw error
var response = {"success":false,"message":cb_social_result.errorDetails,"errorCode":cb_social_result.errorCode};
callback(response);
}
}
var params = {
data:data,
callback: cb_social
}
setAccount(params);
}else{
var response = {"success":true,"message":msg.success, "result": responseResult};
callback(response);
}
}
getAccountInfo(cb_getAccount);
}else{
// Throw error
var response = {"success":false,"message":cb_google_result.errorDetails,"errorCode":cb_google_result.errorCode};
callback(response);
}
}
var params = {
provider: 'google',
callback: cb_google
}
setSocialListener(params);
});
}
}
}
}
catch(err) {
response.success = false;
response.message += " "+msg.default_error;
}
return response;
}
function redirect(url)
{
if((typeof url == "undefined")||(url == null)||(url == ""))
{
url = window.location.href;
}
var params = {
redirectURL: url
};
var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || (typeof safari !== 'undefined' && safari.pushNotification));
if(!isSafari)
{
window.location.replace(url);
}else{
gigya.setSSOToken(params);
}
}
function logout(callback)
{
var cb_logout = function(result){
if (result.errorCode== 0) {
var response = {"success":true,"message":msg.success};
if(isFunction(callback))
{
callback(response);
}
}else{
// Throw error
var response = {"success":false,"message":result.errorDetails,"errorCode":result.errorCode};
if(isFunction(callback))
{
callback(response);
}
}
}
gigya.accounts.logout({callback: cb_logout});
}
function setSubscriptionSource(subscriptionSource)
{
if(typeof subscriptionSource != "undefined")
{
if(config.subscription_source == "multiple" && subscriptionSource != "")
{
config.subscription_source = subscriptionSource;
}
}
}
function setLanguage(lang)
{
if(lang != null){
config.default_language = lang;
}
}
// ********** Utilities **********
// isFunction => returns true if the variable passed is a function.
function isFunction(functionToCheck) {
return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
}
function debug(_log, _environment)
{
if(typeof _environment == "undefined")
{
_environment = "local";
}
if(_environment != "production")
{
console.log(_log);
}
}
//Split Date String in separated values [Day, Month, Year]
function getValueFromDate(date_value, type){
var value = null;
var date_split = date_value.split(/\/|-/);
switch(type){
case 'day':
value = date_split[0];
break;
case 'month':
value = date_split[1];
break;
case 'year':
value = date_split[2];
break;
}
return parseInt(value);
}
function getMessageFromResponse(response)
{
var message = response.errorDetails;
if(typeof response.validationErrors != "undefined")
{
if(message != "")
{
message += ". Errors: ";
}
response.validationErrors.forEach(function(error, index, array) {
message += error.message;
if(index+1 < array.length){
message += ", ";
}
});
}
return message;
}
function getUserInfoFromResponse(response)
{
var userInfo = {};
if(typeof response.UID != "undefined")
{
userInfo.UID = response.UID;
}
if(typeof response.requestParams.profile != "undefined")
{
userInfo.profile = response.requestParams.profile;
}
if(typeof response.requestParams.data != "undefined")
{
userInfo.data = response.requestParams.data;
}
if(typeof response.requestParams.subscriptions != "undefined")
{
userInfo.subscriptions = response.requestParams.subscriptions;
}
return userInfo;
}
function notEmptyValue(_value)
{
if((typeof _value != "undefined")&&(_value != null))
{
if(typeof _value === 'string')
{
if(_value.trim()!="")
{
return true;
}else{
return false;
}
}
}else{
return false;
}
return true;
}
function getSelectedOption(select) {
var result = [];
var options = select.getElementsByTagName('option');
for (var i = 0; i < options.length; i++) {
if (options[i].selected)
return (options[i].value);
};
return result;
}
function getConfig()
{
config.anonymousUserInfo = anonymousUserInfo;
return config;
}
function objectProfile(_form)
{
var profile = {};
// ********** First name **********
if((_form.querySelector('[name="ciam_firstname"]'))&&(notEmptyValue(_form.querySelector('[name="ciam_firstname"]').value)))
{
profile.firstName = _form.querySelector('[name="ciam_firstname"]').value;
}
// ********** Last name **********
if((_form.querySelector('[name="ciam_lastname"]'))&&(notEmptyValue(_form.querySelector('[name="ciam_lastname"]').value)))
{
profile.lastName = _form.querySelector('[name="ciam_lastname"]').value;
}
// ********** Gender **********
if(_form.querySelector('[name="ciam_gender"]'))
{
profile.gender = _form.querySelector('[name="ciam_gender"]').value;
}
// ********** Address **********
if((_form.querySelector('[name="ciam_address"]'))&&(notEmptyValue(_form.querySelector('[name="ciam_address"]').value)))
{
profile.address = _form.querySelector('[name="ciam_address"]').value;
}
// ********** Country **********
if(_form.querySelector('[name="ciam_country"]'))
{
profile.country = _form.querySelector('[name="ciam_country"]').value;
}
// ********** State **********
if(_form.querySelector('[name="ciam_state"]'))
{
profile.state = _form.querySelector('[name="ciam_state"]').value;
}
// ********** City **********
if((_form.querySelector('[name="ciam_city"]'))&&(notEmptyValue(_form.querySelector('[name="ciam_city"]').value)))
{
profile.city = _form.querySelector('[name="ciam_city"]').value;
}
// ********** Zip **********
if((_form.querySelector('[name="ciam_zip"]'))&&(notEmptyValue(_form.querySelector('[name="ciam_zip"]').value)))
{
profile.zip = _form.querySelector('[name="ciam_zip"]').value;
}
// ********** Birthdate **********
if((_form.querySelector('[name="ciam_birthdate"]'))&&(notEmptyValue(_form.querySelector('[name="ciam_birthdate"]').value)))
{
var format = _form.querySelector('[name="ciam_birthdate"]').dataset.dateformat;
var value = _form.querySelector('[name="ciam_birthdate"]').value;
var formatedDate = getDate(value, format);
profile.birthDay = getValueFromDate(formatedDate, 'day');
profile.birthMonth = getValueFromDate(formatedDate, 'month');
profile.birthYear = getValueFromDate(formatedDate, 'year');
}
// ********** Phone **********
if((_form.querySelector('[name="ciam_phone"]'))&&(notEmptyValue(_form.querySelector('[name="ciam_phone"]').value)))
{
profile.phones = {};
profile.phones.number = _form.querySelector('[name="ciam_phone"]').value;
}
// ********** State **********
if((_form.querySelector('[name="ciam_state"]'))&&(notEmptyValue(_form.querySelector('[name="ciam_state"]').value)))
{
profile.state = _form.querySelector('[name="ciam_state"]').value;
}
// ********** State **********
if((_form.querySelector('[name="ciam_language"]'))&&(notEmptyValue(_form.querySelector('[name="ciam_language"]').value)))
{
profile.languages = _form.querySelector('[name="ciam_language"]').value;
}
return profile;
}
function httpResponse(_code, _success, _message, _data)
{
//Get first 3 characters of Gigya Code Error
var code = 500;
var success = null;
var message = "";
if(_code != null)
{
code = parseInt(_code.toString().substring(0,3));
}
if(_success != null)
{
success = _success;
}
switch(code)
{
case 0:
message = msg.success;
code = 200;
if(success == null)success = true;
break;
case 200:
message = msg.success + " "+_message;
if(success == null)success = true;
break;
case 301:
message = msg.invalid_data_center + " "+_message;
if(success == null)success = false;
break;
case 400:
message = msg.bad_request + " "+_message;
if(success == null)success = false;
break;
case 403:
message = msg.forbidden + " "+_message;
if(success == null)success = false;
break;
case 404:
message = msg.not_found + " "+_message;
if(success == null)success = false;
break;
case 500:
message = msg.internal_error + " "+_message;
if(success == null)success = false;
break;
case 504:
message = msg.timeout + " "+_message;
if(success == null)success = false;
break;
default:
message = msg.internal_error + " "+_message;
code = 500;
if(success == null)success = false;
break;
}
var response = {"code": code, "success": success, "message": message};
if(_data != null) response.data = _data;
return response;
}
function getDate(_date, _format)
{
var format = _format;
if(format == null)
{
format = "dd/mm/yyyy";
}
var _delimiter = format.match(/\W/g)[0];
var formatLowerCase = format.toLowerCase();
var formatItems = formatLowerCase.split(_delimiter);
var dateItems = _date.split(_delimiter);
var monthIndex = formatItems.indexOf("mm");
var dayIndex = formatItems.indexOf("dd");
var yearIndex = formatItems.indexOf("yyyy");
if(yearIndex == -1)
{
yearIndex = formatItems.indexOf("aaaa");
}
var month = parseInt(dateItems[monthIndex]);
var formatedDate = dateItems[dayIndex]+"/"+month+"/"+dateItems[yearIndex];
return formatedDate;
}
// ********** Public Method Declaration **********
return {
register: function(params){
return publicRegister(params);
},
login: function(params){
return publicLogin(params);
},
update: function(params){
return publicUpdate(params);
},
logout:function(callback){
return logout(callback);
},
loginForm:function(form, callback){
return loginForm(form, callback);
},
profileForm:function(form, callback, _autofill, _no_session_started_callback){
if(typeof _autofill != "undefined")
{
return profileForm(form, callback, _autofill,_no_session_started_callback);
}else{
return profileForm(form, callback, false, null);
}
},
resetPasswordForm:function(form, callback){
return resetPasswordForm(form, callback);
},
changePasswordForm:function(form, callback){
return changePasswordForm(form, callback);
},
changePasswordFromEmailForm:function(form, callback){
return changePasswordFromEmailForm(form, callback);
},
registrationForm:function(form, callback){
return registrationForm(form, callback);
},
socialForm:function(form, callback){
return socialForm(form, callback);
},
getAccountInfo:function(account_info_callback){
return getAccountInfo(account_info_callback);
},
setAccountInfo:function(params){
return setAccountInfo(params);
},
setSubscriptionSource:function(subscriptionSource){
return setSubscriptionSource(subscriptionSource);
},
setAnonymousInfo:function(arrayAnonymous){
return setAnonymousInfo(arrayAnonymous)
},
redirect:function(url){
return redirect(url);
},
subscriptionForm:function(form, callback){
return subscriptionForm(form, callback);
},
liteAccountForm:function(form, callback){
return liteAccountForm(form, callback);
},
resetPassword: function(params){
return resetPassword(params);
},
subscribe: function(params){
return subscribe(params);
},
createLiteAccount: function(params){
return createLiteAccount(params);
},
hasFullAccount: function(params){
return hasFullAccount(params);
},
showLoginForm:function(params){
return showLoginForm(params);
},
showRegistrationForm:function(params){
return showRegistrationForm(params);
},
showSubscriptionForm:function(params){
return showSubscriptionForm(params);
},
showForgotPasswordForm:function(params){
return showForgotPasswordForm(params);
},
syncAnonymousUserInfo:function(id, source){
return syncAnonymousUserInfo(id, source);
},
setLanguage:function(lang){
return setLanguage(lang);
},
getConfig:function(){
return getConfig();
}
}
};
ciam = ciamManager();