var MakeetEmbed = { embed_name:'makeet_embed_content', install:function(div_id, key, rss, fb_api_key, aFlashvars) { MakeetEmbed.embed_name = div_id ; var flashvars = {}; flashvars.base = "http://www.makeet.com/public/swf/"; flashvars.site = "http://www.makeet.com/fr/";flashvars.lang = "fr"; flashvars.key = key ; flashvars.rss = rss ; flashvars.fb= fb_api_key ? 1 : 0 ; for(p in aFlashvars) { flashvars[p] = aFlashvars[p] ; } var params = {}; params.wmode = "transparent"; params.bgcolor = "#FFFFFF"; params.menu = "false"; params.base = "http://www.makeet.com/public/swf/"; params.allowScriptAccess = "always" ; var attributes = {}; swfobject.embedSWF("http://www.makeet.com/public/swf/customization.swf?v=", MakeetEmbed.embed_name, "550", "430", "9.0.0","http://www.makeet.com/public/swf/expressInstall.swf", flashvars, params, attributes); if(fb_api_key) { window.fbAsyncInit = function() { FB.init({appId: fb_api_key, status: true, cookie: true, xfbml: true});}; (function() { var e = document.createElement('script'); e.async = true; e.src = document.location.protocol + '//connect.facebook.net/fr_FR/all.js'; document.getElementById('fb-root').appendChild(e); }()); } }, publish:function(id_creation, fid, fname, url, image) { var desc = '' ; var attachment = {'name':'Makart créée par ' + fname, 'description':desc, 'href':url, 'media':[{'type':'flash','imgsrc':image,'swfsrc':'http://www.makeet.com/public/swf/player.swf?id_creation=' + id_creation + '&autolaunch=2&share_screen=0','width':'140','height':'100','expanded_width':'460','expanded_height': '284'}]}; ; var actionLinks = [{"text": "Crées toi aussi ta carte", "href": "http://apps.facebook.com/makeet-app/"}]; var params = { method: 'stream.publish', message: '', attachment: attachment, action_links: actionLinks, target_id:fid, user_message_prompt:'Votre message' }; FB.ui(params) ; }, showEmbed:function(id_creation) { var url = 'http://www.makeet.com/fr/affiliation/gigya/id_creation' ; url = url.replace('id_creation', id_creation) ; ModalPopups.Popup("popupEmbed", "Embed Carte", "", {loadUrl:url, width: 800, height: 310}); }, showPaiement:function(id_creation) { var url = 'http://www.makeet.com/fr/paiement/pack1/id_creation' ; url = url.replace('id_creation', id_creation) ; ModalPopups.Popup("popupEmbed", "Paiement Carte", "", {loadUrl:url, width: 850, height: 600}); }, onClose:function() { ModalPopups.Close("popupEmbed") ; var embed = document.getElementById(MakeetEmbed.embed_name) ; if(embed) { embed.closePopup() ; } }, getFacebookFriends:function() { FB.login(MakeetEmbed.onFacebookFriendsLog) ; }, onFacebookFriendsLog:function() { var fid = FB.getSession().uid ; var query = FB.Data.query("SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = {0})", fid) ; query.wait(function(rows) { var embed = document.getElementById(MakeetEmbed.embed_name) ; if(embed) { embed.setFBFriends(rows) ; } }) ; } } var ModalPopupsDefaults = { shadow: true, shadowSize: 5, shadowColor: "#333333", backgroundColor: "#CCCCCC", borderColor: "#999999", titleBackColor: "#C1D2E7", titleFontColor: "#15428B", popupBackColor: "#FFFFFF", popupFontColor: "black", footerBackColor: "#C1D2E7", footerFontColor: "#15428B", fontFamily: "Verdana,Arial", fontSize: "9pt" } var ModalPopups = { Init: function() { //No init required, yet }, SetDefaults: function(parameters) { parameters = parameters || {}; ModalPopupsDefaults.shadow = parameters.shadow != null ? parameters.shadow : ModalPopupsDefaults.shadow; ModalPopupsDefaults.shadowSize = parameters.shadowSize != null ? parameters.shadowSize : ModalPopupsDefaults.shadowSize; ModalPopupsDefaults.shadowColor = parameters.shadowColor != null ? parameters.shadowColor : ModalPopupsDefaults.shadowColor; ModalPopupsDefaults.backgroundColor = parameters.backgroundColor != null ? parameters.backgroundColor : ModalPopupsDefaults.backgroundColor; ModalPopupsDefaults.borderColor = parameters.borderColor != null ? parameters.borderColor : ModalPopupsDefaults.borderColor; ModalPopupsDefaults.titleBackColor = parameters.titleBackColor != null ? parameters.titleBackColor : ModalPopupsDefaults.titleBackColor; ModalPopupsDefaults.titleFontColor = parameters.titleFontColor != null ? parameters.titleFontColor : ModalPopupsDefaults.titleFontColor; ModalPopupsDefaults.popupBackColor = parameters.popupBackColor != null ? parameters.popupBackColor : ModalPopupsDefaults.popupBackColor; ModalPopupsDefaults.popupFontColor = parameters.popupFontColor != null ? parameters.popupFontColor : ModalPopupsDefaults.popupFontColor; ModalPopupsDefaults.footerBackColor = parameters.footerBackColor != null ? parameters.footerBackColor : ModalPopupsDefaults.footerBackColor; ModalPopupsDefaults.footerFontColor = parameters.footerFontColor != null ? parameters.footerFontColor : ModalPopupsDefaults.footerFontColor; ModalPopupsDefaults.fontFamily = parameters.fontFamily != null ? parameters.fontFamily : ModalPopupsDefaults.fontFamily; ModalPopupsDefaults.fontSize = parameters.fontSize != null ? parameters.fontSize : ModalPopupsDefaults.fontSize; }, GetPromptInput: function(id) { var promptValue = ModalPopupsSupport.findControl(id+"_promptInput"); return promptValue; }, GetPromptResult: function(id) { var promptValue = ModalPopupsSupport.findControl(id+"_promptInput"); return promptValue; }, GetCustomControl: function(id) { return ModalPopupsSupport.findControl(id); }, Popup: function(id, title, message, parameters) { //Get parameters parameters = parameters || {}; if(!title) title = "Indicator"; //'Indicator' specific parameters if(parameters.buttons == null) parameters.buttons = ""; //Create layers var myLayers = ModalPopups._createAllLayers(id, title, message, parameters); var oPopupBody = myLayers[4]; //'Indicator' specific setup of Body oPopupBody.innerHTML = message; //Style all layers ModalPopups._styleAllLayers(id, parameters, myLayers); }, //Cancel/Close modal popup Close: function(id) { window.onresize = null; window.onscroll = null; //try //{ document.body.removeChild(ModalPopupsSupport.findControl(id+"_background")); document.body.removeChild(ModalPopupsSupport.findControl(id+"_popup")); document.body.removeChild(ModalPopupsSupport.findControl(id+"_shadow")); //} //catch //{ //} }, //Support variable to put each layer on top, increases everytime a modal popup is created _zIndex: 10000, //Support function to create all layers _createAllLayers: function(id, title, message, parameters) { //Create all 6 layers for; BackGround, Popup, Shadow, PopupTitle, PopupBody, PopupFooter var oBackground = ModalPopupsSupport.makeLayer(id+'_background', true, null); // 0 var oPopup = ModalPopupsSupport.makeLayer(id+'_popup', true, null); // 1 var oShadow = ModalPopupsSupport.makeLayer(id+'_shadow', true, null); // 2 var oPopupTitle = ModalPopupsSupport.makeLayer(id+'_popupTitle', true, oPopup); // 3 var oPopupBody = ModalPopupsSupport.makeLayer(id+'_popupBody', true, oPopup); // 4 var oPopupFooter = ModalPopupsSupport.makeLayer(id+'_popupFooter', true, oPopup); // 5 //Create popup 'title' layer oPopupTitle.innerHTML = "" ; //Create popup 'footer' layer oPopupFooter.innerHTML = ""; //Create popup 'body' layer, is done in; Alert, Confirm, YesNoCancel, Prompt and Custom functions. var allLayers = new Array(oBackground, oPopup, oShadow, oPopupTitle, oPopupBody, oPopupFooter); if(parameters.autoClose != null ) setTimeout('ModalPopups.Close(\"'+id+'\");', parameters.autoClose); return allLayers; }, //Support function to style and position all layers _styleAllLayers: function(id, parameters, allLayers) { var myLayers = allLayers; var oBackground = myLayers[0]; var oPopup = myLayers[1]; var oShadow = myLayers[2]; var oPopupTitle = myLayers[3]; var oPopupBody = myLayers[4]; var oPopupFooter = myLayers[5]; ModalPopups._zIndex += 3; var zIndex = ModalPopups._zIndex; //Get Css parameters for borderColor. parameters.borderColor = parameters.borderColor != null ? parameters.borderColor : ModalPopupsDefaults.borderColor; // #859DBE //Default css for; oBackground, oPopup and oShadow layers //Position elements excluded (except for background); top, left, width, height. //They will be calculated by contents of oPopup, or set by the parameters. var cssBackground = "display:inline; position:absolute; z-index: " + (zIndex) + "; left:0px; top:0px; width:100%; height:100%; filter:alpha(opacity=70); opacity:0.7;"; if(ModalPopupsSupport.isOlderIE()) { var viewport = ModalPopupsSupport.getViewportDimensions(); cssBackground = "display:inline; position:absolute; z-index: 10; left:0px; top:0px; width:" + viewport.width + "px; height:" + viewport.height + "px; filter:alpha(opacity=70); opacity:0.7; overflow:hidden;"; } var cssShadow = "display:inline; position:absolute; z-index: " + (zIndex+1) + ";"; var cssPopup = "display:inline; position:absolute; z-index: " + (zIndex+2) + "; background-color:white; color:black; border:solid 1px " + parameters.borderColor + "; padding:1px;"; // background-color:#EEF1F2 //Get Css parameters for oBackGround layer. parameters.backgroundColor = parameters.backgroundColor != null ? parameters.backgroundColor : ModalPopupsDefaults.backgroundColor; cssBackground += " background-color:" + parameters.backgroundColor + ";"; //Css for oPopup content layers. (oPopupTitle, oPopupBody, oPopupFooter) parameters.fontFamily = parameters.fontFamily != null ? parameters.fontFamily : ModalPopupsDefaults.fontFamily; parameters.fontSize = parameters.fontSize != null ? parameters.fontSize : ModalPopupsDefaults.fontSize; var cssPopupTitle = "position: absolute; font-family:" + parameters.fontFamily + "; font-size:" + parameters.fontSize + "; padding: 0px; text-align:left;"; var cssPopupBody = "position: absolute; font-family:" + parameters.fontFamily + "; font-size:" + parameters.fontSize + "; padding: 5px; text-align:left;"; var cssPopupFooter = "position: absolute; font-family:" + parameters.fontFamily + "; font-size:" + parameters.fontSize + "; padding: 0px; text-align:center;"; //First style the contents of the oPopup layer. (oPopupTitle, oPopupBody, oPopupFooter) //When this is done we can calculate the height and width of the oPopup contents. if(ModalPopupsSupport.isIE) { oPopupTitle.style.cssText = cssPopupTitle; oPopupBody.style.cssText = cssPopupBody; oPopupFooter.style.cssText = cssPopupFooter; } else { oPopupTitle.setAttribute("style", cssPopupTitle); oPopupBody.setAttribute("style", cssPopupBody); oPopupFooter.setAttribute("style", cssPopupFooter); } //Get css color related parameters for; oPopup, oPopupTitle, oPopupBody, oPopupFooter. parameters.titleBackColor = parameters.titleBackColor != null ? parameters.titleBackColor : ModalPopupsDefaults.titleBackColor; parameters.titleFontColor = parameters.titleFontColor != null ? parameters.titleFontColor : ModalPopupsDefaults.titleFontColor; parameters.popupBackColor = parameters.popupBackColor != null ? parameters.popupBackColor : ModalPopupsDefaults.popupBackColor; parameters.popupFontColor = parameters.popupFontColor != null ? parameters.popupFontColor : ModalPopupsDefaults.popupFontColor; parameters.footerBackColor = parameters.footerBackColor != null ? parameters.footerBackColor : ModalPopupsDefaults.footerBackColor; parameters.footerFontColor = parameters.footerFontColor != null ? parameters.footerFontColor : ModalPopupsDefaults.footerFontColor; cssPopupTitle += " background-color:" + parameters.titleBackColor + ";"; cssPopupTitle += " color:" + parameters.titleFontColor + ";"; cssPopupBody += " background-color:" + parameters.popupBackColor + ";"; cssPopupBody += " color:" + parameters.popupFontColor + ";"; cssPopupFooter += " background-color:" + parameters.footerBackColor + ";"; cssPopupFooter += " color:" + parameters.footerFontColor + ";"; //Calculate maxWidth of the 3 layers in oPopup. (oPopupTitle,oPopupBody,oPopupFooter) var calcMaxWidth = 0; if(ModalPopupsSupport.getLayerWidth(oPopupTitle.id) > calcMaxWidth) calcMaxWidth = ModalPopupsSupport.getLayerWidth(oPopupTitle.id); if(ModalPopupsSupport.getLayerWidth(oPopupBody.id) > calcMaxWidth) calcMaxWidth = ModalPopupsSupport.getLayerWidth(oPopupBody.id); if(ModalPopupsSupport.getLayerWidth(oPopupFooter.id) > calcMaxWidth) calcMaxWidth = ModalPopupsSupport.getLayerWidth(oPopupFooter.id); //Calculate total height of the 3 layers in oPopup. (oPopupTitle+oPopupBody+oPopupFooter) var calcTotalHeight = ModalPopupsSupport.getLayerHeight(oPopupTitle.id) + ModalPopupsSupport.getLayerHeight(oPopupBody.id) + ModalPopupsSupport.getLayerHeight(oPopupFooter.id); parameters.width = parameters.width != null ? parameters.width : (calcMaxWidth + 4); // Add 4px for; padding: 1px and border: 1px; parameters.height = parameters.height != null ? parameters.height : calcTotalHeight; // Set height as height of; oPopupTitle + oPopupBody + oPopupFooter //Eerst hoogte oPopupBody aanpassen indien parameters.height is meegegeven var newBodyHeight = ModalPopupsSupport.getLayerHeight(oPopupBody.id) if(parameters.height > calcTotalHeight) { // Sub 10px for; padding: 5px; newBodyHeight = parameters.height - ModalPopupsSupport.getLayerHeight(oPopupTitle.id) - ModalPopupsSupport.getLayerHeight(oPopupFooter.id) - 10; cssPopupBody += " height:" + newBodyHeight + "px;"; calcTotalHeight = ModalPopupsSupport.getLayerHeight(oPopupTitle.id) + newBodyHeight + ModalPopupsSupport.getLayerHeight(oPopupFooter.id); } cssPopupTitle += " top:1px;"; cssPopupBody += " top:" + ModalPopupsSupport.getLayerHeight(oPopupTitle.id) + "px;"; cssPopupFooter += " top:" + (ModalPopupsSupport.getLayerHeight(oPopupTitle.id) + (newBodyHeight) /*ModalPopupsSupport.getLayerHeight(oPopupBody.id)*/) + "px;"; cssPopupTitle += " width:" + (parameters.width - 10) + "px;"; // Sub 10px for; padding-left+right: 5px; cssPopupBody += " width:" + (parameters.width - 10) + "px;"; // Sub 10px for-left+right; padding: 5px; cssPopupFooter += " width:" + (parameters.width - 10) + "px;"; // Sub 10px for-left+right; padding: 5px; //Get browser width and height var frameWidth = ModalPopupsSupport.getFrameWidth(); var frameHeight = ModalPopupsSupport.getFrameHeight(); if(parameters.height < calcTotalHeight) parameters.height = calcTotalHeight; //Get parameters for oPopup layer. parameters.top = parameters.top != null ? parameters.top : ((frameHeight/2) - (parameters.height/2)); parameters.left = parameters.left != null ? parameters.left : ((frameWidth/2) - (parameters.width/2)); //Set modal popup position //cssPopup += " top:" + parameters.top + "px;"; //cssPopup += " left:" + parameters.left + "px;"; cssPopupTitle += " left:1px;"; cssPopupBody += " left:1px;"; cssPopupFooter += " left:1px;"; if(parameters.width) cssPopup += " width:" + parameters.width + "px;"; else cssPopup += " width:" + parameters.maxWidth + "px;"; if(parameters.height) cssPopup += " height:" + (parameters.height-1) + "px;"; else cssPopup += " height:" + (calcTotalHeight-1) + "px;"; //First style the contents of the oPopup layer. (oPopupTitle, oPopupBody, oPopupFooter) //When this is done we can calculate the height and width of the oPopup contents. if(ModalPopupsSupport.isIE) { oPopupTitle.style.cssText = cssPopupTitle; oPopupBody.style.cssText = cssPopupBody; oPopupFooter.style.cssText = cssPopupFooter; } else { oPopupTitle.setAttribute("style", cssPopupTitle); oPopupBody.setAttribute("style", cssPopupBody); oPopupFooter.setAttribute("style", cssPopupFooter); } //Setup shadow layer parameters.shadow = parameters.shadow != null ? parameters.shadow : ModalPopupsDefaults.shadow; parameters.shadowSize = parameters.shadowSize != null ? parameters.shadowSize : ModalPopupsDefaults.shadowSize; if(parameters.shadow) { //Get parameters for oShadow layer. parameters.shadowSize = parameters.shadowSize != null ? parameters.shadowSize : ModalPopupsDefaults.shadowSize; parameters.shadowColor = parameters.shadowColor != null ? parameters.shadowColor : ModalPopupsDefaults.shadowColor; cssShadow += "background-color:" + parameters.shadowColor + ";"; //cssShadow += " top:" + (parameters.top + parameters.shadowSize) + "px;"; //cssShadow += " left:" + (parameters.left + parameters.shadowSize) + "px;"; if(parameters.width) cssShadow += " width:" + parameters.width + "px;"; else cssShadow += " width:" + maxWidth + "px;"; if(parameters.height) cssShadow += " height:" + (parameters.height-1) + "px;"; else cssShadow += " height:" + (calcTotalHeight) + "px;"; } else { cssShadow += " display:none;"; } //Secondly style the contents of the main layers. (oBackGround, oPopup, oShadow) if(ModalPopupsSupport.isIE) { oPopup.style.cssText = cssPopup; oShadow.style.cssText = cssShadow; oBackground.style.cssText = cssBackground; } else { oPopup.setAttribute("style", cssPopup); oShadow.setAttribute("style", cssShadow); oBackground.setAttribute("style", cssBackground); } if(!ModalPopupsSupport.isOlderIE()) { ModalPopupsSupport.centerElement(document.getElementById(id+'_background'), 0, true); } else { var viewport = ModalPopupsSupport.getViewportDimensions(); oBackground.innerHTML = "
"; } ModalPopupsSupport.centerElement(document.getElementById(id+'_popup'), 0, false); if(parameters.shadow) ModalPopupsSupport.centerElement(document.getElementById(id+'_shadow'), parameters.shadowSize, false); //Load file? parameters.loadUrl = parameters.loadUrl != null ? parameters.loadUrl : ""; if(parameters.loadUrl != "") ModalPopups._loadUrl(id, parameters, allLayers, parameters.loadUrl); // parameters.autoClose = parameters.autoClose != null ? parameters.autoClose : 0; // if(!parameters.autoClose) // { window.onresize = function() { ModalPopupsSupport.centerElement(document.getElementById(id+'_background'), 0, true); ModalPopupsSupport.centerElement(document.getElementById(id+'_popup'), 0, false); if(parameters.shadow) { ModalPopupsSupport.centerElement(document.getElementById(id+'_shadow'), parameters.shadowSize, false); } } window.onscroll = function() { ModalPopupsSupport.centerElement(document.getElementById(id+'_background'), 0, true); ModalPopupsSupport.centerElement(document.getElementById(id+'_popup'), 0, false); if(parameters.shadow) { ModalPopupsSupport.centerElement(document.getElementById(id+'_shadow'), parameters.shadowSize, false); } } //} }, //Support function to load text file via AJAX call _loadUrl: function(id, parameters, allLayers, url) { var html = ""; ModalPopups.GetCustomControl(id+"_popupBody").innerHTML = html; parameters.loadUrl = ""; ModalPopups._styleAllLayers(id, parameters, allLayers); } }; var ModalPopupsSupport = { isIE: function() { return (window.ActiveXObject) ? true : false; }, isOlderIE: function() { var ver = -1; // Return value assumes failure. if (navigator.appName == 'Microsoft Internet Explorer') { var ua = navigator.userAgent; var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})"); if (re.exec(ua) != null) { ver = parseFloat( RegExp.$1 ); } } if ( ver > -1 && ver < 7.0 ) { return true; } else { return false; } }, makeLayer : function(id,layerVisible,layerParent) { var container = document.createElement("div"); container.id = id; if(layerParent) layerParent.appendChild(container); else document.body.appendChild(container); return container; }, deleteLayer: function(id) { var del = findLayer(id); if(del) document.body.removeChild(del); }, findLayer: function(id) { return document.all ? document.all[id] : document.getElementById(id); }, findControl: function(id, parent) { if(parent == null) { return document.all ? document.all[id] : document.getElementById(id); } else { return document.all ? document.all[id] : document.getElementById(id); } }, getLayerHeight: function(id) { if (document.all) { gh = document.getElementById(id).offsetHeight; } else { gh = document.getElementById(id).offsetHeight; //-5; } return gh; }, getLayerWidth: function(id) { gw = document.getElementById(id).offsetWidth; return gw; }, getViewportDimensions: function() { var intH = 0, intW = 0; if(self.innerHeight) { intH = window.innerHeight; intW = window.innerWidth; } else { if(document.documentElement && document.documentElement.clientHeight) { intH = document.documentElement.clientHeight; intW = document.documentElement.clientWidth; } else { if(document.body) { intH = document.body.clientHeight; intW = document.body.clientWidth; } } } return { height: parseInt(intH, 10), width: parseInt(intW, 10) }; }, getScrollXY: function() { var scrOfX = 0, scrOfY = 0; if( typeof( window.pageYOffset ) == 'number' ) { //Netscape compliant scrOfY = window.pageYOffset; scrOfX = window.pageXOffset; } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) { //DOM compliant scrOfY = document.body.scrollTop; scrOfX = document.body.scrollLeft; } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) { //IE6 standards compliant mode scrOfY = document.documentElement.scrollTop; scrOfX = document.documentElement.scrollLeft; } return [ scrOfX, scrOfY ]; }, centerElement: function(elem,add,noleft) { var viewport = ModalPopupsSupport.getViewportDimensions(); var left = (viewport.width == 0) ? 50 : parseInt((viewport.width - elem.offsetWidth) / 2, 10); var top = (viewport.height == 0) ? 50 : parseInt((viewport.height - elem.offsetHeight) / 2, 10); var scroll = ModalPopupsSupport.getScrollXY(); //alert(scroll[1]); if(!noleft) { elem.style.left = (left + add) + 'px'; } elem.style.top = (top + add + scroll[1]) + 'px'; viewport, left, top, elem = null; }, readFile: function(filename, intoElement) { var xmlHttp = getXmlHttp(); var file = filename+"?r="+Math.random(); xmlHttp.open("GET", file, true); xmlHttp.onreadystatechange=function() { if (xmlHttp.readyState==4) { intoElement.innerHTML = xmlHttp.responseText; } } xmlHttp.send(null); }, getFrameWidth: function() { var frameWidth = document.documentElement.clientWidth; if (self.innerWidth) // Als de browser deze manier van aanroepen hanteerd { frameWidth = self.innerWidth; // Haal de frame-width op } else if (document.documentElement && document.documentElement.clientWidth) // Als de browser deze manier van aanroepen hanteerd { frameWidth = document.documentElement.clientWidth; // Haal de frame-width op } else if (document.body) // Als de browser deze manier van aanroepen hanteerd { frameWidth = document.body.clientWidth; // Haal de frame-width op } else return; return frameWidth; }, getFrameHeight: function() { var frameHeight = document.documentElement.clientHeight; if (self.innerWidth) // Als de browser deze manier van aanroepen hanteerd { frameHeight = self.innerHeight; // Haal de frame-height op } else if (document.documentElement && document.documentElement.clientWidth) // Als de browser deze manier van aanroepen hanteerd { frameHeight = document.documentElement.clientHeight; // Haal de frame-height op } else if (document.body) // Als de browser deze manier van aanroepen hanteerd { frameHeight = document.body.clientHeight; // Haal de frame-height op } else return; return frameHeight; } };