UNPKG

moschino-ccss16

Version:

Moschino's Capsule Collection Spring Summer 2016 package

877 lines (663 loc) 24.7 kB
/* * name: FASTREG plug-in (for jQuery) * versione: 1.0 * owner: ART area - TECH team *date: 23/06/2015 */ (function( $ ) { "use strict"; $.fn.fastreg = function( options ) { var defaults = { hostlocation: "secure.social.yoox.it", checkRequiredField: true, classFieldWrap: "fieldWrap", templateId: 0, trakingPartner: "", siteCode: "", localizedSitecode: true, inputsName: { mail: "mail", phone: "phone", name: "name", surname: "surname", country: "sitecode", gender: "gender", privacy: "privacy", submit: "submit" }, dataRequest: { SiteCode: "", Email: "", Enable: true, Gender: "F", formType: "fastreg", privacy: "checked", Tp: "", templateId: 0 }, enableFastReg: true, enableSMSSender: false, enableEmailSender: false, promocodeDataRequest: { mail: "", phoneNumber: "", sitecode: "", idtemplate: "", tp: "" }, emailDataRequest: { email: "", userdata: "{}", sitecode: "", idtemplate: "" }, submitter: $(), onAfterGetCountries: function() {}, onAfterSetCountries: function() {}, onAfterSetRequiredField: function() {}, onBeforeSubmit: function() {}, onSuccessSubmit: function() {}, onExistsEmail: function() {}, onUnknownResponse: function() {}, onInvalidData: function() {}, onPromocodeSuccess: function() {}, onPromocodeError: function() {}, onEmailError: function() {}, }; var settings = $.extend( true, {}, defaults, options ); var $obj = $( this ); var counter = 0; var fastreg = { version: "1.0", countries: [], init: function() { this.setAllBinds(); this.getDependencing(); }, setAllBinds: function() { var _this = this; this.setBind( "JSLINQ:EVENT", function() { counter ++; if( counter == 2 ) { _this.triggerEvent( "RUNPLUGIN" + ":EVENT" ); } }); this.setBind( "XHR:EVENT", function() { counter ++; if( counter == 2 ) { _this.triggerEvent( "RUNPLUGIN" + ":EVENT" ); } }); this.setBind( "RUNPLUGIN:EVENT", function() { _this.checkSettings(); }); this.setBind( "CHECKSETTINGS:EVENT", function() { if( settings.enableFastReg ) { _this.presetDataRequest(); _this.getCountries(); } else { _this.triggerEvent( "SETCHANGEINPUT:EVENT" ); } if( settings.enableSMSSender ) { _this.presetPromocodeDataRequest(); } if( settings.enableEmailSender ) { _this.presetEmailRequest(); } }); this.setBind( "GETCOUNTRIES:EVENT", function() { if( typeof settings.onAfterGetCountries == "function" ) { settings.onAfterGetCountries.call( _this ); } _this.setCountries(); }); this.setBind( "SETCOUNTRIES:EVENT, SETCHANGEINPUT:EVENT", function() { if( settings.enableFastReg && typeof settings.onAfterSetCountries == "function" ) { settings.onAfterSetCountries.call( _this ); } if( typeof settings.onAfterSetRequiredField == "function" ) { settings.onAfterSetRequiredField.call( _this ); } _this.setRequiredField(); _this.onChangeEmailText(); _this.onChangeSelect(); _this.onChangeCheck(); _this.onChangePhoneText(); _this.onChangeNameText(); _this.setSubmit(); }); this.setBind( "BEFORESUBMIT:EVENT", function() { if( typeof settings.onBeforeSubmit == "function" ) { settings.onBeforeSubmit.call( _this ); } }); this.setBind( "EMAILNOTEXISTS:EVENT", function() { if( typeof settings.onSuccessSubmit == "function" ) { settings.onSuccessSubmit.call( _this ); } _this.setCookie( "fastregRegistered", settings.dataRequest.templateId, 365 ); window._gaq.push(['_trackEvent', 'TemplatesFastReg', 'template:' + settings.dataRequest.templateId, "success"]); window._gaq.push(['_trackEvent', 'TemplatesFastRegData', 'template:' + JSON.stringify( _this.dataToSend ), "success"]); }); this.setBind( "EMAILEXISTS:EVENT", function() { if( typeof settings.onExistsEmail == "function" ) { settings.onExistsEmail.call( _this ); } _this.setCookie( "fastregRegistered", settings.dataRequest.templateId, 365 ); window._gaq.push(['_trackEvent', 'TemplatesFastReg', 'template:' + settings.dataRequest.templateId, "duplicate"]); window._gaq.push(['_trackEvent', 'TemplatesFastRegData', 'template:' + JSON.stringify( _this.dataToSend ).replace( _this.dataToSend.Email, _this.strTohex( _this.dataToSend.Email )), "duplicate"]); }); this.setBind( "UNKNOWNERROR:EVENT", function() { if( typeof settings.onUnknownResponse == "function" ) { settings.onUnknownResponse.call( _this ); } }); this.setBind( "INVALIDDATA:EVENT", function() { if( typeof settings.onInvalidData == "function" ) { settings.onInvalidData.call( _this ); } window._gaq.push(['_trackEvent', 'TemplatesFastRegFail', 'template:' + JSON.stringify( _this.dataToSend )]); }); this.setBind( "PROMOCODE:EVENT", function() { if( typeof settings.onPromocodeSuccess == "function" ) { settings.onPromocodeSuccess.call( _this ); } }); this.setBind( "PROMOCODEERROR:EVENT", function() { if( typeof settings.onPromocodeError == "function" ) { settings.onPromocodeError.call( _this ); } }); this.setBind( "EMAIL:EVENT", function() { if( typeof settings.onEmailSuccess == "function" ) { settings.onEmailSuccess.call( _this ); } }); this.setBind( "EMAILERROR:EVENT", function() { if( typeof settings.onEmailError == "function" ) { settings.onEmailError.call( _this ); } }); this.setBind( "DONE:EVENT", function() { settings.submitter.removeClass("sending"); if( typeof window.console.log == "function" ) { $.each(_this.response, function(k, respObj) { console.log( "RESPONSE MESSAGE:\n" + (respObj.d ? respObj.d.replace(/(\r\n|\n|\r)/gm, "") : "NULL") ); }); console.log( ); } }); }, getDependencing: function() { $.support.cors = true; if( typeof XDomainRequest != "undefined" && !window.XMLHttpRequest.supportsXDR ) { this.loadScript( "XHR", "//yooxsocial-prod-01.s3.amazonaws.com/static/freeHTML/js/lib/xhr-xdr-adapter.js" ); } else { this.triggerEvent( "XHR" + ":EVENT" ); } if( typeof window.JSLINQ == "undefined" ) { this.loadScript( "JSLINQ", "//social.yoox.it/js/src/lib/JSLINQ.js" ); } else { this.triggerEvent( "JSLINQ" + ":EVENT" ); } }, checkSettings: function() { var isDone = true; if( settings.siteCode == "" || !isNaN( settings.siteCode ) ) { isDone = false; alert( "Error settings! [SiteCode option]" ); } if( settings.templateId == 0 || isNaN( settings.templateId ) ) { isDone = false; alert( "Error settings! [templateId option]" ); } if( !settings.enableFastReg && !settings.enableSMSSender && !settings.enableEmailSender ) { isDone = false; alert( "One of these must be enabled:\nenableFastReg, enableSMSSender or enableEmailSender" ); } if( isDone ) { this.triggerEvent( "CHECKSETTINGS" + ":EVENT" ); } }, presetDataRequest: function() { settings.dataRequest.templateId = settings.templateId; settings.dataRequest.tp = settings.trakingPartner; }, presetPromocodeDataRequest: function() { settings.promocodeDataRequest.idtemplate = settings.templateId; settings.promocodeDataRequest.tp = settings.trakingPartner; settings.promocodeDataRequest.sitecode = settings.localizedSitecode ? settings.siteCode + "_" + TEMPLATEINFO.iso : settings.siteCode; }, presetEmailRequest: function() { settings.emailDataRequest.idtemplate = settings.templateId; settings.emailDataRequest.sitecode = settings.siteCode + "_" + TEMPLATEINFO.iso; }, getCountries: function() { var _this = this; $.ajax("//" + settings.hostlocation + "/api/YooxProxy.aspx", { data: { 'op': 'getSiteCountry', 'site': settings.siteCode, 'socialSandBox': '658as4tr54215' }, type: 'GET', dataType: 'json' }).done(function ( data ) { data.Countries = JSLINQ( data.Countries ) .OrderBy(function( x ) { return x.Name; }) .ToArray(); _this.countries = data.Countries; _this.triggerEvent( "GETCOUNTRIES:EVENT" ); }).fail(function( jqXHR, textStatus, errorThrown ) { if( typeof window.console.log == "function" ) { console.log( "GETCOUNTRIES ERROR!" + "\n" + errorThrown ); } }) }, setCountries: function() { var _this = this; $obj.each(function( key, form ) { var $select = $( form ).find( "select[name='" + settings.inputsName.country + "']" ); var $default = $select.find( "option" ).eq( 0 ); var $span = $select.siblings( "span" ).eq( 0 ); $span.text( $default.text() ); $.each(_this.countries, function( i, itemObj ) { $select.append($('<option>', { value: settings.siteCode + "_" + itemObj.Code, text : itemObj.Name })); }); _this.triggerEvent( "SETCOUNTRIES:EVENT" ); }); }, onChangePhoneText: function() { var _this = this; $obj.each(function( key, form ) { var $input = $( form ).find( "input[name='" + settings.inputsName.phone + "']" ); if( _this.isRequiredField( $input ) ) { $input.keyup(function( h ) { _this.isValidPhone( $( this ) ); }); $input.on("blur", function() { _this.isValidPhone( $( this ) ); }); } $input.on("focus", function() { $( this ).addClass( "focus" ); }); $input.on("blur", function() { $( this ).removeClass( "focus" ); }); }); }, onChangeNameText: function() { var _this = this; $obj.each(function( key, form ) { var $input = $( form ).find( "input[name='" + settings.inputsName.name + "'],[name='" + settings.inputsName.surname + "']" ); $input.each(function(k, v) { if( _this.isRequiredField( $( this ) ) ) { $( this ).keyup(function( h ) { _this.isValidName( $( this ) ); }); $( this ).on("blur", function() { _this.isValidName( $( this ) ); }); } $( this ).on("focus", function() { $( this ).addClass( "focus" ); }); $( this ).on("blur", function() { $( this ).removeClass( "focus" ); }); }); }); }, onChangeEmailText: function() { var _this = this; $obj.each(function( key, form ) { var $input = $( form ).find( "input[name='" + settings.inputsName.mail + "']" ); if( _this.isRequiredField( $input ) ) { $input.keyup(function( h ) { _this.isValidEmail( $( this ) ); }); $input.on("blur", function() { _this.isValidEmail( $( this ) ); }); } $input.on("focus", function() { $( this ).addClass( "focus" ); }); $input.on("blur", function() { $( this ).removeClass( "focus" ); }); }); }, onChangeSelect: function() { var _this = this; $obj.each(function( key, form ) { var $select = $( form ).find( "select[name='" + settings.inputsName.country + "']" ); var $span = $select.siblings( "span" ).eq( 0 ); $select.change(function( h ) { $span.text( $select.find( "option:checked" ).text() ); if( _this.isRequiredField( $select ) ) { _this.isValidCountry( $( this ) ); } }); $select.on("focus", function() { $span.addClass( "focus" ); }); $select.on("blur", function() { $span.removeClass( "focus" ); if( _this.isRequiredField( $select ) ) { _this.isValidCountry( $( this ) ); } }); }); }, onChangeCheck: function() { var _this = this; $obj.each(function( key, form ) { var $inputs = $( this ).find( "input[type='radio'], input[type='checkbox']" ); $inputs.each(function( k, v ) { var $span = $( this ).siblings( "span" ).eq( 0 ); if( $( this ).is( ':checked' ) ) { $span.addClass( "selected" ); } $( this ).change(function( h ) { if( $( this ).is( ':checked' ) ) { if( $( this ).attr( "type" ) == "radio" ) { $( form ).find( "." + settings.classFieldWrap + " input[type='radio']" ).siblings( "span" ).removeClass( "selected" ); } $span.addClass( "selected" ); } else { $span.removeClass( "selected" ); } if( _this.isRequiredField( $( this ) ) && $( this ).attr( "type" ) == "checkbox" ) { _this.isCheckedPrivacy( $( this ) ); } }); $( this ).on("focus", function() { $span.addClass( "focus" ); }); $( this ).on("blur", function() { $span.removeClass( "focus" ); if( _this.isRequiredField( $( this ) ) && $( this ).attr( "type" ) == "checkbox" ) { _this.isCheckedPrivacy( $( this ) ); } }); }); }); }, setSubmit: function() { var _this = this; $obj.each(function( key, form ) { var $submit = $( form ).find( "input[name='" + settings.inputsName.submit + "']" ); $submit.click(function( e ) { e.preventDefault(); if( _this.checkDataRequest( $( form ) ) ) { _this.triggerEvent( "BEFORESUBMIT:EVENT" ); settings.submitter = $submit.addClass("sending"); if( settings.enableFastReg ) { _this.dataToSend = _this.getDataToSend( $( form ) ); $.ajax("//" + settings.hostlocation + "/api/yooxproxy.aspx?op=fastRegistration&siteCode=" + _this.dataToSend.SiteCode, { dataType: 'json', contentType: 'application/json', data: JSON.stringify( _this.dataToSend ), type: 'POST', processData: false, success: function( jqXHR ) { _this.triggerEvent( "EMAILNOTEXISTS:EVENT" ); }, error: function( jqXHR, textStatus, errorThrown ) { if( jqXHR.responseText.indexOf("(409)") >= 0 ) { _this.triggerEvent( "EMAILEXISTS:EVENT" ); } else { _this.triggerEvent( "UNKNOWNERROR:EVENT" ); } } }).always(function( jqXHR, textStatus, errorThrown ) { _this.response = { registration: jqXHR }; _this.triggerEvent( "DONE:EVENT" ); }); } if( settings.enableSMSSender ) { _this.promocodeToSend = _this.getPromocodeToSend( $( form ) ); $.extend( _this.promocodeToSend, { mail: $( form ).find( "input[name='" + settings.inputsName.mail + "']" ).val() } ); $.ajax('//ylanding-prod-1-eu-west-1.elasticbeanstalk.com/tools.asmx/sendTemplateSms', { dataType: 'json', contentType: 'application/json; charset=utf-8', data: JSON.stringify( _this.promocodeToSend ), type: 'POST', success: function( jqXHR ) { _this.triggerEvent( "PROMOCODE:EVENT" ); }, error: function( jqXHR, textStatus, errorThrown ) { _this.triggerEvent( "PROMOCODEERROR:EVENT" ); } }).always(function( jqXHR, textStatus, errorThrown ) { _this.response = { promocode: jqXHR }; _this.triggerEvent( "DONE:EVENT" ); }); } if( settings.enableEmailSender ) { _this.emailToSend = _this.getEmailToSend( $( form ) ); $.extend( _this.emailToSend, { email: $( form ).find( "input[name='" + settings.inputsName.mail + "']" ).val() } ); $.ajax('//ylanding-prod-1-eu-west-1.elasticbeanstalk.com/tools.asmx/sendTemplateMail', { dataType: 'json', contentType: 'application/json; charset=utf-8', data: JSON.stringify( _this.emailToSend ), type: 'POST', success: function( jqXHR ) { _this.triggerEvent( "EMAIL:EVENT" ); }, error: function( jqXHR, textStatus, errorThrown ) { _this.triggerEvent( "EMAILERROR:EVENT" ); } }).always(function( jqXHR, textStatus, errorThrown ) { _this.response = { promocode: jqXHR }; _this.triggerEvent( "DONE:EVENT" ); }); } } else { _this.triggerEvent( "INVALIDDATA:EVENT" ); } }) }); }, checkDataRequest: function( $form ) { var isValid = true; var $field = null; if( settings.enableFastReg ) { $field = $form.find( "input[name='" + settings.inputsName.mail + "']" ); if( this.isRequiredField( $field ) && !this.isValidEmail( $field ) ) { isValid = false; } $field = $form.find( "select[name='" + settings.inputsName.country + "']" ); if( this.isRequiredField( $field ) && !this.isValidCountry( $field ) ) { isValid = false; } } if( settings.enableSMSSender ) { $field = $form.find( "input[name='" + settings.inputsName.phone + "']" ); if( this.isRequiredField( $field ) && !this.isValidPhone( $field ) ) { isValid = false; } } if( settings.enableEmailSender ) { $field = $form.find( "input[name='" + settings.inputsName.name + "']" ); if( this.isRequiredField( $field ) && !this.isValidName( $field ) ) { isValid = false; } $field = $form.find( "input[name='" + settings.inputsName.surname + "']" ); if( this.isRequiredField( $field ) && !this.isValidName( $field ) ) { isValid = false; } } $field = $form.find( "input[name='" + settings.inputsName.privacy + "']" ); if( $field.length ) { if( this.isRequiredField( $field ) && !this.isCheckedPrivacy( $field ) ) { isValid = false; } } return isValid; }, setRequiredField: function() { $obj.each(function( key, form ) { var $field = $( form ).find( "input[name='" + settings.inputsName.mail + "']" ); if( typeof $field.attr( "required" ) == "undefined" ) { $field.attr( "required", "required" ); } $field = $( form ).find( "select[name='" + settings.inputsName.country + "']" ); if( typeof $field.attr( "required" ) == "undefined" ) { $field.attr( "required", "required" ); } $field = $( form ).find( "input[name='" + settings.inputsName.privacy + "']" ); if( typeof $field.attr( "required" ) == "undefined" ) { $field.attr( "required", "required" ); } $field = $( form ).find( "input[name='" + settings.inputsName.phone + "']" ); if( typeof $field.attr( "required" ) == "undefined" ) { $field.attr( "required", "required" ); } }); }, isRequiredField: function( $field ) { if( settings.checkRequiredField && typeof $field.attr( "required" ) != "undefined" ) { return true; } return false; }, isValidPhone: function( $field ) { var filterPhone = /^(\+|00)?([0-9])+(\s)?(([0-9])+\s?){5,}/g; if( filterPhone.test( $field.val() ) === false || typeof $field.val() === 'undefined' ) { $field.addClass( "error" ); return false; } $field.removeClass( "error" ); return true; }, isValidName: function( $field ) { var filterName = /[a-zA-Z\s.]/g; if( filterName.test( $field.val() ) === false || typeof $field.val() === 'undefined' ) { $field.addClass( "error" ); return false; } $field.removeClass( "error" ); return true; }, isValidEmail: function( $field ) { var filterEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; if( filterEmail.test( $field.val() ) === false || typeof $field.val() === 'undefined' ) { $field.addClass( "error" ); return false; } $field.removeClass( "error" ); return true; }, isValidCountry: function( $field ) { var $span = $field.siblings( "span" ).eq( 0 ); if( $field.val() == "" ) { $field.add( $span ).addClass( "error" ); return false; } $field.add( $span ).removeClass( "error" ); return true; }, isCheckedPrivacy: function( $field ) { var $span = $field.siblings( "span" ).eq( 0 ); if( !$field.prop( "checked" ) ) { $field.add( $span ).addClass( "error" ); return false; } $field.add( $span ).removeClass( "error" ); return true; }, getDataToSend: function( $form ) { var dataRequest = {}; var $field = $form.find( "input[name='" + settings.inputsName.mail + "']" ); if( $field.length ) { dataRequest.Email = $field.val(); } $field = $form.find( "select[name='" + settings.inputsName.country + "']" ).find( "option:checked" ); if( $field.length ) { dataRequest.SiteCode = $field.val(); } $field = $form.find( "input[name='" + settings.inputsName.gender + "']:checked" ); if( $field.length ) { dataRequest.Gender = $field.val(); } $field = $form.find( "input[name='" + settings.inputsName.privacy + "']" ); if( $field.length ) { dataRequest.privacy = $field.is(':checked') ? "checked" : ""; } dataRequest.Enable = true; return $.extend( true, {}, settings.dataRequest, dataRequest ); }, getPromocodeToSend: function( $form ) { var promocodeDataRequest = {}; var $field = $form.find( "input[name='" + settings.inputsName.phone + "']" ); if( $field.length ) { promocodeDataRequest.phoneNumber = $field.val().replace(/[\s\+]/g, ""); } return $.extend( true, {}, settings.promocodeDataRequest, promocodeDataRequest ); }, getEmailToSend: function( $form ) { var emailDataRequest = {}; emailDataRequest.userdata = {}; var $field = $form.find( "input[name='" + settings.inputsName.name + "']" ); if( $field.length ) { emailDataRequest.userdata.name = $field.val(); } var $field = $form.find( "input[name='" + settings.inputsName.surname + "']" ); if( $field.length ) { emailDataRequest.userdata.surname = $field.val(); } emailDataRequest.userdata = JSON.stringify( emailDataRequest.userdata ); return $.extend( true, {}, settings.emailDataRequest, emailDataRequest ); }, strTohex: function( str ) { var hex = ''; for( var i = 0; i < str.length; i++ ) { hex += str.charCodeAt( i ).toString( 16 ); } return hex; }, setCookie: function( cname, cvalue, exdays ) { var d = new Date(); d.setTime( d.getTime() + (exdays*24*60*60*1000) ); var expires = "expires=" + d.toUTCString(); document.cookie = cname + "=" + cvalue + "; " + expires + "; path=/"; }, loadScript: function( nameScript, src ) { var _this = this; var t = window.document.createElement('script'); t.async = true; t.type = 'text/javascript'; t.src = src; var s = window.document.getElementsByTagName('script')[0]; s.parentNode.insertBefore( t, s ); t.onload = function() { _this.triggerEvent( nameScript + ":EVENT" ); }; }, setBind: function( bindName, callback ) { $.each(bindName.replace(/\s/g, '').split(','), function(k, tokenEvent) { window.document.addEventListener(tokenEvent, function( e ) { if( typeof callback == "function" ) { callback.call( this ); } }, false); }); }, triggerEvent: function( eventName ) { var e = window.document.createEvent("Event"); e.initEvent( eventName, true, true); window.document.dispatchEvent( e ); } }; fastreg.init(); return $obj; }; })( jQuery );