{
	"onmousedown": "ontouchstart",
	"tag": "app",
	"label": "Measurer",
	"id": "xx99251176",
	"children": [],
	"properties": [],
	"methods": [
		{
			"tag": "app_fn",
			"id": "getDay",
			"proto": "()",
			"code": "",
			"docs": {
				"files": []
			},
			"tabs": []
		}
	],
	"classes": [
		{
			"tag": "app_cls",
			"id": "tabMeasures",
			"properties": [],
			"methods": [],
			"docs": {
				"text": "",
				"files": []
			},
			"graphic": {
				"tag": "div",
				"className": "tabMeasures",
				"css": {},
				"style": {},
				"attributes": {},
				"children": []
			},
			"tabs": [],
			"inherits": "tabAppli",
			"elt": {
				"tag": "div",
				"className": "tabMeasures appElt_default",
				"css": {
					"height": "100%",
					"display": "flex",
					"flexDirection": "column",
					"minHeight": "1px"
				},
				"style": {},
				"docs": {
					"text": "",
					"files": []
				},
				"children": [
					{
						"tag": "div",
						"className": "tabMeasures_header appElt_default",
						"css": {},
						"style": {},
						"docs": {
							"text": "",
							"files": []
						},
						"children": [],
						"dn": "displayTabMeasures_header"
					},
					{
						"tag": "div",
						"className": "tabMeasures_body appElt_default",
						"css": {
							"flex": 1
						},
						"style": {},
						"docs": {
							"text": "",
							"files": []
						},
						"children": [
							{
								"tag": "grid",
								"fields": [],
								"records": [],
								"idObj": "tabMeasures",
								"isObj": "_grid",
								"css": {},
								"style": {},
								"docs": {
									"files": []
								}
							}
						],
						"dn": "displayTabMeasures_body"
					},
					{
						"tag": "div",
						"className": "tabMeasures_footer appElt_default",
						"css": {},
						"style": {},
						"docs": {
							"text": "",
							"files": []
						},
						"children": [],
						"dn": "displayTabMeasures_footer"
					}
				]
			},
			"obj": {
				"tag": "app_object",
				"id": "tabMeasures",
				"label": "tabMeasures",
				"fields": [
					{
						"tag": "formInput",
						"id": "weight",
						"label": "Weight",
						"type2": "number",
						"type": "string"
					},
					{
						"tag": "formInput",
						"id": "waistLine",
						"label": "WaistLine",
						"type2": "number",
						"type": "string"
					},
					{
						"tag": "formInput",
						"id": "date",
						"label": "Date",
						"type2": "date",
						"defaultValue": "$currentDate",
						"type": "string"
					}
				]
			}
		},
		{
			"tag": "app_cls",
			"id": "tabMeals",
			"properties": [],
			"methods": [
				{
					"tag": "app_fn",
					"id": "displayDish",
					"proto": "(dish)",
					"code": "",
					"docs": {
						"files": []
					},
					"tabs": [],
					"elt": {
						"css": {
							"height": "100%",
							"display": "flex",
							"flexDirection": "column",
							"minHeight": "1px"
						},
						"children": [
							{
								"tag": "div",
								"className": "dish_header appElt_default",
								"css": {
									"display": "flex",
									"flexDirection": "row",
									"minWidth": "1px"
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"tag": "div",
										"className": "dish_header_left appElt_default",
										"css": {},
										"style": {},
										"docs": {
											"text": "",
											"files": []
										},
										"children": [],
										"dn": "displayDishHeaderLeft"
									},
									{
										"tag": "div",
										"className": "dish_header_center appElt_default",
										"css": {
											"flex": 1
										},
										"style": {},
										"docs": {
											"text": "",
											"files": []
										},
										"children": [],
										"dn": "displayDishHeaderCenter",
										"html": "$dish.label"
									},
									{
										"tag": "div",
										"className": "dish_header_right appElt_default",
										"css": {},
										"style": {},
										"docs": {
											"text": "",
											"files": []
										},
										"children": [
											{
												"tag": "img",
												"src": "img/menuDish.png",
												"isObj": "_menuDish"
											}
										],
										"dn": "displayDishHeaderRight"
									}
								],
								"dn": "displayDishHeader"
							},
							{
								"css": {
									"flex": 1
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"tag": "div",
								"className": "dish_body appElt_default",
								"dn": "displayDishBody",
								"children0": "$dish.meals.map(meal => this displayMeal(meal))"
							},
							{
								"tag": "div",
								"className": "dish_footer appElt_default",
								"css": {
									"display": "flex",
									"flex-direction": "row",
									"justify-content": "end"
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"tag": "img",
										"src": "img/addMeal.png",
										"className": "addMeal appElt_default",
										"children": [],
										"onclick": "this addMeal(dish)"
									}
								],
								"dn": "displayDishFooter"
							}
						],
						"style": [],
						"tag": "div",
						"className": "dish appElt_default"
					}
				},
				{
					"tag": "app_fn",
					"id": "displayMeal",
					"proto": "(meal)",
					"code": "",
					"docs": {
						"files": []
					},
					"tabs": [],
					"elt": {
						"css": {
							"height": "100%",
							"display": "flex",
							"flexDirection": "row",
							"minWidth": "1px"
						},
						"children": [
							{
								"tag": "div",
								"className": "meal_left appElt_default",
								"css": {},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"tag": "img",
										"src": "img/this.getIconDish(dish)",
										"className": "iconDish appElt_default",
										"children": []
									}
								],
								"dn": "displayMealLeft"
							},
							{
								"css": {
									"flex": 1
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"tag": "div",
								"className": "meal_center appElt_default",
								"dn": "displayMealLabel",
								"html": "$dish.label"
							}
						],
						"style": [],
						"tag": "div",
						"className": "meal appElt_default"
					}
				},
				{
					"tag": "app_fn",
					"id": "getIconDish",
					"proto": "(dish)",
					"code": "",
					"docs": {
						"files": []
					}
				},
				{
					"tag": "app_fn",
					"id": "addMeal",
					"proto": "(dish)",
					"code": "",
					"docs": {
						"files": []
					}
				}
			],
			"docs": {
				"text": "",
				"files": []
			},
			"graphic": {
				"tag": "div",
				"className": "meals",
				"css": {},
				"style": {},
				"attributes": {},
				"children": []
			},
			"tabs": [],
			"elt": {
				"tag": "div",
				"className": "meals appElt_default",
				"css": {
					"height": "100%",
					"display": "flex",
					"flexDirection": "column",
					"minHeight": "1px"
				},
				"style": {},
				"docs": {
					"text": "",
					"files": []
				},
				"children": [
					{
						"tag": "div",
						"className": "meals_header appElt_default",
						"css": {},
						"style": {},
						"docs": {
							"text": "",
							"files": []
						},
						"children": [],
						"dn": "displayMealsHeader"
					},
					{
						"tag": "div",
						"className": "meals_body appElt_default",
						"css": {
							"flex": 1
						},
						"style": {},
						"docs": {
							"text": "",
							"files": []
						},
						"children": [
							{
								"css": {
									"width": "100%",
									"height": "100%",
									"background-color": "#00ff00"
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"tag": "div",
								"className": "listMeals appElt_default",
								"children0": "$appli.getDay().dishes.map(dish => this.displayDish(dish))"
							}
						],
						"dn": "displayMealsBody"
					},
					{
						"tag": "div",
						"className": "meals_footer appElt_default",
						"css": {},
						"style": {},
						"docs": {
							"text": "",
							"files": []
						},
						"children": [],
						"dn": "displayMealsFooter"
					}
				]
			},
			"inherits": "tabAppli"
		},
		{
			"tag": "app_cls",
			"id": "tabSessions",
			"properties": [
				{
					"tag": "app_pro",
					"id": "sessions",
					"type": "[(session)]",
					"docs": {
						"files": []
					},
					"tabs": []
				}
			],
			"methods": [
				{
					"tag": "app_fn",
					"id": "addSession",
					"proto": "async ()",
					"code": "var session=this.newSession()\nvar result=await this.dlgSession(session); if(! result)return\nthis._calendar.addRecord(session, {date:new Date()})\nthis.updateControls()",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "newSession",
					"proto": "(map)",
					"code": "return jsa.sum({\ntag:\"session\",\nid:this.newId(\"session\"),\nlabel:tr(\"New training session\"),\ncomment:\"\",\nchildren:[]\n}, map)\n",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "updateControls",
					"proto": "()",
					"code": "",
					"docs": {
						"files": []
					}
				},
				{
					"tag": "app_fn",
					"id": "dlgSession",
					"proto": "async (session)",
					"code": "return new Promise((resolve, reject) => {\n\tvar dummy={}\njsa.dlg({\n\ttag:\"dlg\",\n\ttitle:\"Training session \",\n\tisObj:\"_dlg\",\n\towner:dummy,\n\tmaximized:true,\n\tonOk:\"function(data){dummy._dlg.close(); resolve(true); return true;}\",\n\tonCancel:\"function(){resolve(false)}\",\n        children:[this.displaySession(session)]\n})\n\t})",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "displaySession",
					"proto": "(session)",
					"code": "",
					"docs": {
						"files": []
					},
					"tabs": [],
					"elt": {
						"css": {
							"height": "100%",
							"display": "flex",
							"flexDirection": "column",
							"minHeight": "1px"
						},
						"children": [
							{
								"tag": "div",
								"className": "appElt_default session_header",
								"css": {},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"dn": "displaySessionHeader",
								"html": "$session.label"
							},
							{
								"css": {
									"flex": 1
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"tag": "app_fnShortcuts",
										"shortcuts": [
											"this.displaySessionHeader()",
											"this.displayExercice()"
										]
									}
								],
								"code": "return this.children.map(child => {\n  switch(child.tag){\n     case \"header\":\n        return this.displaySessionHeader(child)\n     case \"exercice\":\n        return this.displayExercice(child)\n     }\n  })",
								"tag": "div",
								"className": "appElt_default session_body",
								"dn": "displaySessionBody"
							},
							{
								"tag": "div",
								"className": "appElt_default session_footer",
								"css": {},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"children": [
											{
												"css": {},
												"style": {},
												"docs": {
													"text": "",
													"files": []
												},
												"children": [
													{
														"css": {},
														"style": {},
														"docs": {
															"files": []
														},
														"tag": "tool",
														"className": "tool",
														"id": "cmdAddHeader",
														"src": "img/addHeader.png",
														"title": "Add header",
														"onclick": "async function(evt){console.log(); me.addHeader(this._session)}"
													},
													{
														"css": {},
														"style": {},
														"docs": {
															"files": []
														},
														"tag": "tool",
														"className": "tool",
														"id": "cmdAddExercice",
														"src": "img/addHeader.png",
														"title": "Add exercise",
														"onclick": "async function(evt){console.log(); me.addExercice(this._session)}"
													}
												],
												"tag": "div",
												"className": "appElt_default session_footer_left"
											},
											{
												"tag": "div",
												"className": "appElt_default session_footer_right",
												"css": {},
												"style": {},
												"docs": {
													"text": "",
													"files": []
												},
												"children": [
													{
														"css": {},
														"style": {},
														"docs": {
															"files": []
														},
														"tag": "tool",
														"className": "tool",
														"id": "cmdDelete",
														"src": "img/delete.png",
														"title": "Delete Session",
														"session": "$session",
														"onclick": true
													}
												]
											},
											{
												"tag": "div",
												"className": "appElt_default session_footer_middle",
												"css": {
													"flex": "1",
													"display": "flex",
													"flex-direction": "row"
												},
												"style": {},
												"docs": {
													"text": "",
													"files": []
												},
												"children": [
													{
														"tag": "tool",
														"className": "tool",
														"id": "cmdPlay",
														"src": "img/play.png",
														"title": "Play"
													},
													{
														"tag": "tool",
														"className": "tool",
														"id": "cmdPause",
														"src": "img/pause.png",
														"title": "Pause"
													},
													{
														"tag": "tool",
														"className": "tool",
														"id": "cmdStop",
														"src": "img/stop.png",
														"title": "Stop"
													},
													{
														"tag": "tool",
														"className": "tool",
														"id": "cmdTogglePlayMode",
														"src": "img/openPopup.png",
														"title": "Toggle play mode",
														"css": {},
														"style": {},
														"docs": {
															"files": []
														}
													}
												],
												"paste": ""
											}
										],
										"css": {
											"flex-direction": "row",
											"display": "flex",
											"justify-content": "space-between"
										},
										"style": {},
										"docs": {
											"files": []
										},
										"tag": "div",
										"className": "session_toolbar"
									}
								],
								"dn": "displaySessionFooter"
							}
						],
						"style": [],
						"tag": "div",
						"className": "appElt_default session",
						"isElt": "_divSession",
						"session": "$session",
						"docs": {
							"files": []
						}
					}
				},
				{
					"tag": "app_fn",
					"id": "displaySessionHeader",
					"proto": "(header)",
					"code": "",
					"docs": {
						"files": []
					},
					"tabs": [],
					"elt": {
						"css": {
							"font-weight": "bold",
							"font-size": "16pt"
						},
						"children": [],
						"style": [],
						"tag": "div",
						"className": "appElt_default session_header",
						"fontsize": "",
						"html": "$header.label",
						"oncontextmenu": "function(evt){console.log(\">\");}"
					}
				},
				{
					"tag": "app_fn",
					"id": "displayExercice",
					"proto": "(exercise)",
					"code": "",
					"docs": {
						"files": []
					},
					"tabs": [],
					"elt": {
						"css": {
							"display": "flex",
							"flex-direction": "row"
						},
						"children": [
							{
								"tag": "div",
								"className": "appElt_default exercise_label",
								"css": {
									"font-weight": "bold"
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"html": "$exercice.label"
							},
							{
								"tag": "div",
								"className": "appElt_default exercice_reps",
								"css": {
									"display": "flex",
									"flex-direction": "row"
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"tag": "app_fnShortcuts",
										"shortcuts": [
											"this.displayRepetition()",
											"this.displayRepetionRest()"
										]
									}
								],
								"code": "exercice.repetitions.forEach(rep => {\n  div.children.push(this.displayRepetition(rep)))\n  div children.push(this.displayRepetionRest(rep))\n   }"
							},
							{
								"tag": "div",
								"className": "appElt_default exercise_ctrls",
								"css": {
									"display": "flex",
									"flex-direction": "row"
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"children": [],
										"css": {},
										"style": {},
										"docs": {
											"files": []
										},
										"tag": "img",
										"src": "img/add.png",
										"className": "appElt_default repetion_add",
										"onclick": "function(evt){console.log(); me.addRepetition(null, this._exercice)}"
									}
								]
							}
						],
						"style": [],
						"docs": {
							"files": []
						},
						"tag": "div",
						"className": "appElt_default session_exercice",
						"exercice": "$exercice",
						"oncontextmenu": "function(evt){console.log(\">\");}"
					}
				},
				{
					"tag": "app_fn",
					"id": "displayRepetition",
					"proto": "(rep)",
					"code": "",
					"docs": {
						"files": []
					},
					"tabs": [],
					"elt": {
						"css": {
							"height": "100%",
							"display": "flex",
							"flex-direction": "column",
							"min-height": "1px"
						},
						"children": [
							{
								"css": {},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"css": {
											"text-align": "center"
										},
										"style": {},
										"docs": {
											"text": "",
											"files": []
										},
										"children": [],
										"tag": "input",
										"className": "appElt_default repetition_level",
										"type": "text",
										"value": "$rep.level",
										"onchange": "function(evt){console.log(); this._rep.level=this.value}"
									}
								],
								"tag": "div",
								"className": "appElt_default exercice_repetition_header",
								"dn": "displayExerciceRepetitionHeader"
							},
							{
								"css": {
									"flex": 1
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"css": {
											"display": "flex",
											"flex-direction": "column",
											"text-align": "center"
										},
										"style": {},
										"docs": {
											"text": "",
											"files": []
										},
										"children": [],
										"tag": "input",
										"className": "appElt_default exercise_repetition_nb",
										"type": "text",
										"value": "$rep.nb",
										"onchange": "function(evt){console.log(); this._rep.nb=nb}"
									}
								],
								"tag": "div",
								"className": "appElt_default exercice_repetition_body",
								"dn": "displayExerciceRepetitionBody"
							},
							{
								"tag": "div",
								"className": "appElt_default exercice_repetition_footer",
								"css": {},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"css": {
											"text-align": "center"
										},
										"style": {},
										"docs": {
											"text": "",
											"files": []
										},
										"children": [],
										"tag": "input",
										"className": "appElt_default",
										"type": "text",
										"value": "$rep.duration",
										"onchange": "function(evt){console.log(); this _rep.duration=duration}"
									}
								],
								"dn": "displayExerciceRepetitionFooter"
							}
						],
						"style": [],
						"tag": "div",
						"className": "appElt_default exercice_repetition",
						"repetition": "$repetition",
						"oncontextmenu": "function(evt){console.log(\">\");}"
					}
				},
				{
					"tag": "app_fn",
					"id": "displayRepetionRest",
					"proto": "(rep)",
					"code": "",
					"docs": {
						"files": []
					},
					"tabs": [],
					"elt": {
						"css": {
							"height": "100%",
							"display": "flex",
							"flex-direction": "column"
						},
						"children": [
							{
								"css": {
									"text-align": "center"
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"tag": "input",
								"className": "appElt_default",
								"type": "text",
								"value": "$rep.rest",
								"onchange": "function(evt){console.log(); this._rest.rest=this.value}"
							}
						],
						"style": [],
						"tag": "div",
						"className": "appElt_default repetition_rest"
					}
				},
				{
					"tag": "app_fn",
					"id": "addRepetition",
					"proto": "(map, exercise)",
					"code": "var last=exercise.repeats.slice(-1);\n if(!last)last=this.getPreviousSiblingExercice(exercice)\n var level=last? last.level : undefined \nvar repetition=jsa.sum({tag:\"repetition\", level:level})\nexercise.repeats.push(repetition)\nthis.updateContent()",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "addExercice",
					"proto": "async (session)",
					"code": "var possibleExercice=await this.dlgChoiceExercice(); if(!possibleExercice)return null;\nvar exercice=this.newExercice(possibleExercice)\nsession.children.push(exercice)\nthis.updateSession(session)\nreturn exercise ",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "addHeader",
					"proto": "async (session)",
					"code": "var label=prompt(\"Type a label\", \"New label\"); if(!label)return \nvar header=this.newHeader({label:label})\nsession.children.push(header)\nthis.updateSession(session)\n",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "getPreviousSiblingExercice",
					"proto": "(exercice)",
					"code": "",
					"docs": {
						"files": [],
						"text": "Renvoie le dernier exercice effectué du même type que celui indiqué en argument.\nUtile pour savoir à combien on était la dernière fois "
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "updateContent",
					"proto": "()",
					"code": "var oldDiv=this._divBody\nvar newDiv=jsa.generate(this.displayBody())\noldDiv.parentElement.replaceChild(newDiv, oldDiv)",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "newExercice",
					"proto": "(map)",
					"code": "return jsa.sum({tag:\"exercise\"}, map)",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "dlgChoiceExercice",
					"proto": "()",
					"code": "",
					"docs": {
						"files": []
					}
				},
				{
					"tag": "app_fn",
					"id": "updateSession",
					"proto": "(session)",
					"code": "var oldDiv=this._divSession\nvar newDiv=this.displaySession(session)\noldDiv.parentElement.replaceChild(newDiv. oldDiv)",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "deleteSession",
					"proto": "(session)",
					"code": "var index=this.sessions.findIndex(session); if(!session)return\nthis.session.splice(index)\nthis.updateContent()",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "deleteChild",
					"proto": "(child)",
					"code": "var index=this.children.findIndex(child); if(index==-1)return\nthis.children.splice(index)\nthis.updateSession(this._session)",
					"docs": {
						"files": [],
						"text": "(child) {header | exercice}"
					},
					"tabs": []
				}
			],
			"docs": {
				"text": "",
				"files": []
			},
			"graphic": {
				"tag": "div",
				"className": "workouts",
				"css": {},
				"style": {},
				"attributes": {},
				"children": []
			},
			"tabs": [],
			"inherits": "tabAppli",
			"elt": {
				"tag": "div",
				"className": "tabWorkouts appElt_default",
				"css": {
					"height": "100%",
					"display": "flex",
					"flexDirection": "column",
					"minHeight": "1px"
				},
				"style": {},
				"docs": {
					"text": "",
					"files": []
				},
				"children": [
					{
						"css": {},
						"style": {},
						"docs": {
							"text": "",
							"files": []
						},
						"children": [],
						"tag": "div",
						"className": "appElt_default tabSessions_header",
						"dn": "displayHeader"
					},
					{
						"css": {
							"flex": 1
						},
						"style": {},
						"docs": {
							"text": "",
							"files": []
						},
						"children": [
							{
								"css": {
									"height": "100%",
									"width": "100%"
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"css": {},
										"style": {},
										"docs": {
											"text": "",
											"files": []
										},
										"children": [],
										"tag": "div",
										"tag1": "calendar",
										"type": "week",
										"isObj": "_calendar",
										"className": "appElt_default calendar",
										"html": "_calendar"
									}
								],
								"tag": "div",
								"className": "appElt_default tabSessions_body",
								"isElt": "_divBody"
							}
						],
						"tag": "div",
						"className": "tabWorkouts_body appElt_default",
						"dn": "displayBody"
					},
					{
						"css": {},
						"style": {},
						"docs": {
							"text": "",
							"files": []
						},
						"children": [
							{
								"tag": "toolbar",
								"className": "toolbar",
								"children": [
									{
										"css": {},
										"style": {},
										"docs": {
											"files": []
										},
										"tag": "tool",
										"className": "tool",
										"id": "cmdAddRecord",
										"src": "img/add.png",
										"title": "New session",
										"onclick": "function(evt){console.log('>'; me.addSession())}"
									}
								],
								"css": {},
								"style": {},
								"docs": {
									"files": []
								}
							}
						],
						"tag": "div",
						"className": "appElt_default tabSessions_footer",
						"dn": "displayFooter"
					}
				]
			}
		},
		{
			"tag": "app_cls",
			"id": "calendar",
			"properties": [
				{
					"tag": "app_pro",
					"id": "dateBegin",
					"type": "date",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_pro",
					"id": "dateEnd",
					"type": "date",
					"docs": {
						"files": []
					}
				},
				{
					"tag": "app_pro",
					"id": "type",
					"type": "string",
					"docs": {
						"files": []
					},
					"tabs": [],
					"possibleValues": "day, week, month, year"
				},
				{
					"tag": "app_pro",
					"id": "_days",
					"type": "[]",
					"docs": {
						"files": []
					}
				},
				{
					"tag": "app_pro",
					"id": "locale",
					"type": "string",
					"docs": {
						"files": []
					},
					"tabs": [],
					"defaultValue": "fr-FR"
				},
				{
					"tag": "app_pro",
					"id": "showOnlyDaysPeriod",
					"type": "boolean",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_pro",
					"id": "nameDays",
					"type": "[]",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_pro",
					"id": "nameMonths",
					"type": "[]",
					"docs": {
						"files": []
					}
				},
				{
					"tag": "app_pro",
					"id": "availablePeriods",
					"type": "[{firstHour, lastHour}]",
					"docs": {
						"files": [],
						"text": "Plage horaire journalière sur laquelle on peut affecter des records"
					},
					"tabs": []
				},
				{
					"tag": "app_pro",
					"id": "_divBody",
					"type": "(HTML Element)",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_pro",
					"id": "records",
					"type": "[{record}]",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_pro",
					"id": "representations",
					"type": "[{representation}]",
					"docs": {
						"files": []
					},
					"tabs": []
				}
			],
			"methods": [
				{
					"tag": "app_fn",
					"id": "setDateStart",
					"proto": "(date)",
					"code": "...\nthis.update()",
					"docs": {
						"files": [],
						"text": "date : date locale ou date js"
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "setDateEnd",
					"proto": "(date)",
					"code": "...\nthis.update()",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "update",
					"proto": "()",
					"code": "\nthis.updateGraphic()\nthis.updateControls()",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "updateGraphic",
					"proto": "()",
					"code": "var oldDiv=this._graphic\nvar newDiv=jsa.generate(this display())\noldDiv.parentElement.replace(oldDiv, newDiv)",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "updateControls",
					"proto": "()",
					"code": "",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "displayYear",
					"proto": "(year)",
					"code": "\nif(year==undefined)year=new Date().getFullYear();\n",
					"docs": {
						"files": [],
						"text": "var year=this.dateBegin.getFullYear()\nvar dateBegin=(this.showOnlyPeriod)? this.dateBegin : this.firstDay(this.dateBegin, \"year\")\nvar dateEnd=this.dateEnd"
					},
					"tabs": [],
					"elt": {
						"css": {
							"height": "100%",
							"display": "flex",
							"flexDirection": "column",
							"minHeight": "1px"
						},
						"children": [
							{
								"tag": "div",
								"className": "calendar_year_header appElt_default",
								"css": {
									"display": "flex",
									"flexDirection": "row",
									"minWidth": "1px"
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"css": {},
										"style": {},
										"docs": {
											"text": "",
											"files": []
										},
										"children": [],
										"tag": "div",
										"className": "calendar_year_header_left appElt_default"
									},
									{
										"css": {
											"flex": 1,
											"display": "flex",
											"flex-direction": "row",
											"justify-content": "space-between"
										},
										"style": {},
										"docs": {
											"text": "",
											"files": []
										},
										"children": [
											{
												"tag": "img",
												"src": "img/arrowLeft.png",
												"className": "calendar_ctrl appElt_default",
												"children": [],
												"onclick": "function(evt){console.log}",
												"css": {},
												"style": {},
												"docs": {
													"files": []
												}
											},
											{
												"css": {
													"text-align": "center",
													"font-weight": "bold"
												},
												"style": {},
												"docs": {
													"text": "",
													"files": []
												},
												"children": [],
												"tag": "div",
												"className": "calendar_labelYear appElt_default",
												"html": "$year",
												"onclick": "function(evt){console.log}"
											},
											{
												"tag": "div",
												"className": "appElt_default",
												"css": {},
												"style": {},
												"docs": {
													"text": "",
													"files": []
												},
												"children": []
											},
											{
												"tag": "img",
												"src": "img/arrowRight.png",
												"className": "calendar_ctrl appElt_default",
												"children": [],
												"onclick": "function(evt){console.log}",
												"css": {},
												"style": {},
												"docs": {
													"files": []
												}
											}
										],
										"tag": "div",
										"className": "calendar_year_header_center appElt_default",
										"": ""
									},
									{
										"css": {},
										"style": {},
										"docs": {
											"text": "",
											"files": []
										},
										"children": [],
										"tag": "div",
										"className": "calendar_menu appElt_default",
										"dn": "displayCalendarMenu"
									}
								],
								"dn": "displayCalendarYearHeader"
							},
							{
								"css": {
									"flex": 1
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"tag": "app_fnShortcuts",
										"shortcuts": [
											"this.displayYearMonth()"
										]
									}
								],
								"code": "var firstMonth=(this.showOnlyDaysPeriod)? this.dateBegin.getMonth() : 0\nvar lastMonth=(showOnlyDaysPeriod)? this.dateEnd.getMonth() : 11;\nfor(var month = firstMonth ; month<=lastMonth ; month++)\n  this.children.push(this.displayYearMonth(month,year))\n",
								"tag": "div",
								"className": "calendar_year_body appElt_default",
								"dn": "displayCalendarYearBody"
							},
							{
								"tag": "div",
								"className": "calendar_year_footer appElt_default",
								"css": {},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"dn": "displayCalendarYearFooter"
							}
						],
						"style": [],
						"code": "voir Doc",
						"tag": "div",
						"className": "calendar_year",
						"isElt": "_divYear"
					}
				},
				{
					"tag": "app_fn",
					"id": "displayYearMonth",
					"proto": "(month, year)",
					"code": " ",
					"docs": {
						"files": []
					},
					"tabs": [],
					"elt": {
						"css": {
							"height": "100%",
							"display": "flex",
							"flexDirection": "column",
							"minHeight": "1px"
						},
						"children": [
							{
								"css": {
									"font-weight": "bold",
									"border": "solid 1px gray",
									"background-color": "#d4d4d4",
									"text-align": "center"
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"tag": "div",
								"className": "appElt_default appElt_default_header",
								"html": "this.nameMonth($month)"
							},
							{
								"tag": "div",
								"className": "appElt_default appElt_default_body",
								"css": {
									"flex": 1
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"tag": "app_fnShortcuts",
										"shortcuts": [
											"this.displayYearDay()"
										]
									}
								],
								"dn": "displayAppEltDefaultBody",
								"code": "var firstDay=(this.showOnlyDaysPeriod)? this.dateBegin.dateStart() : 1\nvar lastDay=(this.showOnlyDaysPeriod)? this.dateEnd.getDay() : this.getLastDayOfMonth(month, year)\nfor(var day=firstDay ; day<=lastDay ; day++)this.children.push(this.displayYearDay(day, month, year))"
							},
							{
								"tag": "div",
								"className": "appElt_default appElt_default_footer",
								"css": {},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"dn": "displayAppEltDefaultFooter"
							}
						],
						"style": [],
						"tag": "div",
						"className": "appElt_default calendar_month"
					}
				},
				{
					"tag": "app_fn",
					"id": "displayYearDay",
					"proto": "(day, month, year)",
					"code": "this.attributes={\n\tisInPeriod:\"$this.isInPeriod(day, month, year)\",\n\tisWeekend:\"$this.isInWeekend(day, month, year)\"\n\t}",
					"docs": {
						"files": []
					},
					"tabs": [],
					"elt": {
						"css": {
							"height": "100%"
						},
						"children": [],
						"style": [],
						"tag": "div",
						"className": "appElt_default calendar_day calendar_year_day",
						"html": "$this.nameDay(day)"
					}
				},
				{
					"tag": "app_fn",
					"id": "displayMonth",
					"proto": "(month)",
					"code": "if(year==undefined)year=new Date().getFullYear();\nif(month==undefined)month=new Date().getMonth();\n",
					"docs": {
						"files": []
					},
					"tabs": [],
					"elt": {
						"css": {
							"height": "100%",
							"display": "flex",
							"flexDirection": "column",
							"minHeight": "1px"
						},
						"children": [
							{
								"tag": "div",
								"className": "appElt_default calendar_month_header",
								"css": {
									"display": "flex",
									"flex-direction": "row",
									"justify-content": "space-between"
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"children": [],
										"css": {},
										"style": {},
										"docs": {
											"files": []
										},
										"tag": "img",
										"src": "img/arrowLeft.png",
										"className": "calendar_ctrl appElt_default",
										"onclick": "function(evt){console.log}"
									},
									{
										"tag": "div",
										"className": "appElt_default calendar_labelMonth",
										"css": {},
										"style": {},
										"docs": {
											"text": "",
											"files": []
										},
										"children": [],
										"html": "$this.nameMonth(month)"
									},
									{
										"children": [],
										"css": {},
										"style": {},
										"docs": {
											"files": []
										},
										"tag": "img",
										"src": "img/arrowRight.png",
										"className": "calendar_ctrl appElt_default",
										"onclick": "function(evt){console.log}"
									}
								],
								"dn": "displayCalendarMonthHeader"
							},
							{
								"tag": "div",
								"className": "appElt_default calendar_month_body",
								"css": {
									"flex": 1
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"dn": "displayCalendarMonthBody",
								"code": "var firstDay=(this.showOnlyDaysPeriod)? this dateBegin.getDate() : 0\nvar lastDay=(showOnlyDaysPeriod)? this.dateEnd.getDate() : this.getLastDayOfMonth(month, year);\nvar divWeek;\nfor(var day = firstDay ; day<=lastDay ; day++){\n  if(!day || !(day % 7)){\n    divWeek={tag:\"div\", className:\"calendar_month_week\", children:[]}\n    this.children.push(divWeek)\n    }\n  divWeek.children.push(this.displayMonthDay(day,month,year))\n  }\n"
							},
							{
								"tag": "div",
								"className": "appElt_default calendar_month_footer",
								"css": {},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"dn": "displayCalendarMonthFooter"
							}
						],
						"style": [],
						"tag": "div",
						"className": "appElt_default calendar_month",
						"isElt": "_divMonth"
					}
				},
				{
					"tag": "app_fn",
					"id": "afterInit",
					"proto": "(map)",
					"code": "this.setPeriod(map.dateBegin, map.dateEnd)",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "setPeriod",
					"proto": "(dateBegin, dateEnd)",
					"code": "// (locale date or js date)\nif(!dateBegin)return _error(\"Required parameter\", \"dateBegin\" );\nif(!dateEnd)return _error(\"Required parameter\", \"dateEnd\" );\nthis.dateBegin=this.date(dateBegin)\nthis.dateEnd=this.date(dateEnd)\nthis.update()",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "date",
					"proto": "(dateBegin)",
					"code": "",
					"docs": {
						"files": [],
						"text": "renvoie une date js a partir d'une date locale ou js"
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "beforeInit",
					"proto": "()",
					"code": "this.initDays()\nthis.initRepresentations()",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "getLastDayOfMonth",
					"proto": "(month, year)",
					"code": "",
					"docs": {
						"files": [],
						"text": "Renvoie le quantième du jour du mois indiqué "
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "nameMonth",
					"proto": "(indexMonth)",
					"code": "return this.nameMonths[indexMonth]",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "nameDay",
					"proto": "()",
					"code": "",
					"docs": {
						"files": []
					}
				},
				{
					"tag": "app_fn",
					"id": "isInPeriod",
					"proto": "(day, month, year)",
					"code": "",
					"docs": {
						"files": [],
						"text": "Renvoie true si le jour indiqué est dans la période d'affichage "
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "isInWeekend",
					"proto": "(day, month, year)",
					"code": "",
					"docs": {
						"files": [],
						"text": "Renvoie True si le jour est dans un weekend "
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "getLastDayOfMonth",
					"proto": "(month, year)",
					"code": "",
					"docs": {
						"files": [],
						"text": "Renvoie le dernier jour du mois indiqué "
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "displayMonthDay",
					"proto": "(day, month, year)",
					"code": "this.attributes={\n\tisInPeriod:\"$this.isInPeriod(day, month, year)\",\n\tisWeekend:\"$this.isInWeekend(day, month, year)\"\n\t}",
					"docs": {
						"files": []
					},
					"tabs": [],
					"elt": {
						"css": {
							"height": "100%"
						},
						"children": [],
						"tag": "div",
						"className": "appElt_default calendar_day calendar_month_day",
						"html": "$this.nameDay(day)"
					}
				},
				{
					"tag": "app_fn",
					"id": "displayWeek",
					"proto": "()",
					"code": "",
					"docs": {
						"files": []
					},
					"tabs": [],
					"elt": {
						"css": {
							"height": "100%",
							"display": "flex",
							"flexDirection": "column",
							"minHeight": "1px"
						},
						"children": [
							{
								"css": {
									"display": "flex",
									"flexDirection": "row",
									"minWidth": "1px",
									"justify-content": "space-between"
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [
									{
										"css": {},
										"style": {},
										"docs": {
											"text": "",
											"files": []
										},
										"children": [],
										"tag": "img",
										"src": "img/arrowLeft.png",
										"className": "calendar_ctrl appElt_default",
										"onclick": "function(evt){console.log}"
									},
									{
										"css": {},
										"style": {},
										"docs": {
											"text": "",
											"files": []
										},
										"children": [],
										"tag": "div",
										"className": "calendar_labelWeek appElt_default",
										"html": "Week $week",
										"onclick": "function(evt){console.log}"
									},
									{
										"css": {},
										"style": {},
										"docs": {
											"text": "",
											"files": []
										},
										"children": [],
										"tag": "img",
										"src": "img/arrowLeft.png",
										"className": "calendar_ctrl appElt_default",
										"onclick": "function(evt){console.log}"
									}
								],
								"tag": "div",
								"className": "appElt_default calendar_week_header",
								"dn": "displayCalendarWeekHeader"
							},
							{
								"tag": "div",
								"className": "appElt_default calendar_week_body",
								"css": {
									"flex": 1
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"dn": "displayCalendarWeekBody",
								"code": "var firstDay=(this.showOnlyDaysPeriod)? this.dateBegin : this.getMondayBefore(this.dateBegin)\nvar lastDay=(showOnlyDaysPeriod)? this.dateEnd : this.getSundayAfter(this.dateEnd);\nfor(var day = firstDay ; day<=lastDay ; day++)\n  this.children.push(this.displayWeekDay(day))\n"
							},
							{
								"tag": "div",
								"className": "appElt_default calendar_week_footer",
								"css": {},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"dn": "displayCalendarWeekFooter"
							}
						],
						"style": [],
						"tag": "div",
						"className": "appElt_default calendar_week",
						"isElt": "_divWeek"
					}
				},
				{
					"tag": "app_fn",
					"id": "displayWeekDay",
					"proto": "(day)",
					"code": "",
					"docs": {
						"files": []
					},
					"tabs": [],
					"elt": {
						"css": {
							"height": "100%",
							"display": "flex",
							"flexDirection": "column",
							"minHeight": "1px"
						},
						"children": [
							{
								"tag": "div",
								"className": "appElt_default calendar_week_day_header",
								"css": {},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"dn": "displayCalendarWeekDayHeader",
								"html": "$appli.nameDay(day)"
							},
							{
								"css": {
									"flex": 1
								},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"code": "var availablePeriods=(this.availablePeriods.length)? this availablePeriods : [{firstHour:8, lastHour:18}]\navailablePeriods.forEach(availablePeriod => this.children.push(this.displayAvailablePeriod(availablePeriod)))",
								"tag": "div",
								"className": "appElt_default calendar_week_day_body",
								"dn": "displayCalendarWeekDayBody"
							},
							{
								"tag": "div",
								"className": "appElt_default calendar_week_day_footer",
								"css": {},
								"style": {},
								"docs": {
									"text": "",
									"files": []
								},
								"children": [],
								"dn": "displayCalendarWeekDayFooter"
							}
						],
						"style": [],
						"tag": "div",
						"className": "appElt_default calendar_day calendar_week_day"
					}
				},
				{
					"tag": "app_fn",
					"id": "displayAvailablePeriod",
					"proto": "(availablePeriod)",
					"code": "for(var hour=availablePeriod.firstHour ; hour<=availablePeriod.lastHour ; hour++)\n  this.children.push(this.displayWeekHour(hour))",
					"docs": {
						"files": []
					},
					"tabs": [],
					"elt": {
						"css": {
							"border": "solid 2px"
						},
						"children": [],
						"style": [],
						"tag": "div",
						"className": "appElt_default calendar_availablePeriod"
					}
				},
				{
					"tag": "app_fn",
					"id": "displayWeekHour",
					"proto": "(hour)",
					"code": "",
					"docs": {
						"files": []
					},
					"tabs": [],
					"elt": {
						"css": {
							"border": "solid 1px #aaaaaa"
						},
						"children": [],
						"style": [],
						"tag": "div",
						"className": "appElt_default calendar_hour calendar_week_hour",
						"html": "$hour"
					}
				},
				{
					"tag": "app_fn",
					"id": "me_generate",
					"proto": "()",
					"code": "this.updateRecords()",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "updateRecords",
					"proto": "()",
					"code": "this.clear()\nthis.fillRecords()",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "clear",
					"proto": "()",
					"code": "var divRecords=this._divBody.querySelectorAll(\".divRecord\")\nfor(var i=0 ; i< divRecords.length ; i++){\n    var divRecord=divRecords[i]\n    divRecord.parentElement.removeChild(divRecord)\n   }",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "fillRecords",
					"proto": "()",
					"code": "this.records.forEach(record => this.appendRecord(record));",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "appendRecord",
					"proto": "(record)",
					"code": "if(!record)return\nswitch(type){\n\tcase \"year\":\n         if(record.date){\n\tvar divMonth=this.getDivMonth(this.date); if(!divMonth)continue ;\n        var divDay=this.getDivDay(record.date, divMonth); if(!divDay)continue \n        this.appendDivRecord(divDay, record)\n          }\n       else \n\t{\n        var period=record.period; if(!period) continue;\n        var dateBegin=this.date(period.dateBegin)\n        var dateEnd=this.date(period.dateEnd)\n        for(var day=dateBegin; day<=dateEnd; date.setDate(date.getDate()+1)){\n\t  var divMonth=this.getDivMonth(day); if(!divMonth) continue ;\n          var divDay=this.getDivDay(day, divMonth)\n          this.appendDivRecord(divDay, record)\n\t  }\n        }\n\tbreak;\n       case \"month\":\n       if(record.date){\n          var divDay=this.getDivDay(record.date, this._divMonth); if(!divDay) continue \n          this.appendDivRecord(divDay, record)\n          }\n       else \n\t{\n        var period=record.period; if(!period) continue;\n        var dateBegin=this.date(period.dateBegin)\n        var dateEnd=this.date(period.dateEnd)\n        for(var day=dateBegin; day<=dateEnd; date.setSetDate(date.getDate()+1))\n          var divDay=this.getDivDay(day, this._divMonth)\n          this.appendDivRecord(divDay, record)\n\t  }\n          break;\n\tcase \"week\":\n          if(record.date){\n          var divHour=this.getDivHour(record.date); if(!divHour)continue \n          this.appendDivRecord(divHour, record)\n          }\n          else \n\t   {\n           var period=record.period; if(!period) continue;\n           var hourBegin=this.date(period.dateBegin)\n           var hourEnd=this.date(period.dateEnd)\n           for(var hour=hourBegin; hour<=hourEnd; hour.setSetHour(date.getHour()+1))\n             var divHour=this.getDivHour(hour)\n             this.appendDivRecord(divHour, record)\n\t     }\n         break;\n\tcase \"day\":\n\t\tbreak;\n\t}\n",
					"docs": {
						"files": [],
						"text": "Place un div pointant sur un enregistrement dans le calendrier"
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "getDivMonth",
					"proto": "(date)",
					"code": "this._divYear.querySelectorAll(\".calendar_month\")[date.getMonth()] \n",
					"docs": {
						"files": [],
						"text": "retrouve le div correspondant au mois qu'on trouve dans la date\n\n(Date)"
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "getDivDay",
					"proto": "(date, divAncestor)",
					"code": "return divAncestor.querySelectorAll(\".calendar_day\")[date.getDay()] ",
					"docs": {
						"files": [],
						"text": "Trouve le div correspondant à la date indiquée en argument qui se situe qque part à l'intérieur de divAncestor \n\n(Date)\n(Div)"
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "appendDivRecord",
					"proto": "(divParent, record)",
					"code": "var div = this.displayRecord(record); if(!div)return\ndivParent.appendChild(div)",
					"docs": {
						"files": [],
						"text": "Ajoute un élément divRecord dans une case représentant un jour ou une heure"
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "getDivHour",
					"proto": "(date)",
					"code": "var indexDay=date.getWeekDay()\n\nvar divDays=this._divWeek.querySelectorAll(\".divDay\");\nfor(var i=0 ; i<divDays.length ; i++){\n  var divDay=divDays[i]\n  if(divDay._indexDay==indedDay){\n     var divHours=divDay.querySelectorAll(\".calendar_day\")\n     for(var j=0 ; j<divHours.length ; j++)if(divHours[j]._indexHour==indexHour)return divHours[j]\n     }\n  }\nreturn null\n",
					"docs": {
						"files": [],
						"text": "Renvoie le div correspondant à l'heure présente dans la date. Attention le jour, le mois et l'année doivent correspondre "
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "initRepresentations",
					"proto": "()",
					"code": "this.representations=[\n  {id:\"default\", type:\"fill\"}\n  ]",
					"docs": {
						"files": []
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "displayRecord",
					"proto": "(record)",
					"code": "var tag=record.tag; if(!tag)return return _error(\"Tag required\", record)\nvar rep=this.representations.find(rep => rep.id==tag); if(!rep)rep=this.representations[0]\nvar div={\nclassName:\"calendar_record\",\nattributes:{type:rep.type},\nstyle:rep.style\n}\nswitch(rep.type){\n\tcase \"circle\":\n          div.html=\"&#9899;\"\n\t\tbreak;\n\tcase \"disc\":\n           div.html=\"&#9899;\"\n\t\tbreak;\n\tcase \"square \":\n                div.html=\"&x25a0;\"\n\t\tbreak;\n\tcase \"triangular \":\n              div.html=\"&x25b2;\"\n\t\tbreak;\n        case \"star\":\n           div.html=\"&x2605;\"\n           break;\n        case \"star2\":\n           div.html=\"&x27e2;\"\n           break;\n\tcase \"img\":\n              div.tag=\"img\"\n              div.src=rep.src\n\t\tbreak;\n        case \"fill\": default:\n        }\n\nreturn div;",
					"docs": {
						"files": [],
						"text": "Creer la regle css\ncalendar_record[type=fill]{\n  width:100%\n  heigh:100%\n  }"
					},
					"tabs": []
				},
				{
					"tag": "app_fn",
					"id": "initDays",
					"proto": "()",
					"code": "this.nameDays=[\"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\", \"Dim\"]\nthis.nameMonths=[\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"] ",
					"docs": {
						"files": []
					},
					"tabs": []
				}
			],
			"docs": {
				"text": "",
				"files": [
					{
						"tag": "app_file",
						"label": "record",
						"content": "date (Date)\nou period {period}\n\nUn enregistrement peut s'appliquer à une date précise ou sur une plage fe dates appelée période ",
						"tabs": []
					},
					{
						"tag": "app_file",
						"label": "representation",
						"content": "type (string) fill, circle, disc, square, triangular, star, star2, img\nimg (pathImg) seulement pour type=img\nclassName (string)\nstyle {css}",
						"tabs": []
					},
					{
						"tag": "app_file",
						"label": "period",
						"content": "dateBegin\ndateEnd",
						"tabs": []
					}
				]
			},
			"graphic": {
				"tag": "div",
				"className": "calendar",
				"css": {},
				"style": {},
				"attributes": {},
				"children": []
			},
			"tabs": [],
			"elt": {
				"tag": "div",
				"className": "calendar appElt_default",
				"css": {
					"height": "100%",
					"display": "flex",
					"flexDirection": "column",
					"minHeight": "1px"
				},
				"style": {},
				"docs": {
					"text": "",
					"files": []
				},
				"children": [
					{
						"css": {},
						"style": {},
						"docs": {
							"text": "",
							"files": []
						},
						"children": [],
						"tag": "div",
						"className": "calendar_header appElt_default",
						"dn": "displayHeader"
					},
					{
						"css": {
							"flex": 1
						},
						"style": {},
						"docs": {
							"text": "",
							"files": []
						},
						"children": [
							{
								"tag": "app_fnShortcuts",
								"shortcuts": [
									"this.displayYear()",
									"this.displayMonth()",
									"this.displayWeek()",
									"this.displayDay()"
								]
							}
						],
						"code": "switch(this.type){\n\tcase \"year\":\n     \t\treturn this.displayYear()\n\tcase \"month\":\n\t\treturn this.displayMonth()\n\tcase \"week\":\n\t\treturn this.displayWeek()\n\tcase \"day\":\n\t\treturn this.displayDay()\n\t}",
						"tag": "div",
						"className": "calendar_body appElt_default",
						"dn": "displayBody",
						"isElt": "_divBody"
					},
					{
						"css": {},
						"style": {},
						"docs": {
							"text": "",
							"files": []
						},
						"children": [],
						"tag": "div",
						"className": "calendar_footer appElt_default",
						"dn": "displayFooter"
					}
				],
				"displayYearDay()": "",
				"initDays": "",
				"": ""
			}
		}
	],
	"dirs": [],
	"docs": {
		"text": "",
		"files": [
			{
				"tag": "app_file",
				"label": "Session ",
				"content": "label\ncomment\nchildren [{exercise, header}]",
				"tabs": []
			},
			{
				"tag": "app_file",
				"label": "Exercice ",
				"content": "label\ncomment\n\n\nrepeats [{repeat}]",
				"tabs": []
			},
			{
				"tag": "app_file",
				"label": "Repetition",
				"content": "level\nnb\nduration\nrest\ncomment ",
				"tabs": []
			},
			{
				"tag": "app_file",
				"label": "header",
				"content": "label (string)",
				"tabs": []
			}
		]
	},
	"elt": {
		"tag": "div",
		"className": "myApp appElt_default appElt_default",
		"css": {
			"height": "100%",
			"display": "flex",
			"flexDirection": "column",
			"minHeight": "1px"
		},
		"style": {},
		"docs": {
			"text": "",
			"files": []
		},
		"children": [
			{
				"css": {
					"display": "flex",
					"flexDirection": "row",
					"minWidth": "1px"
				},
				"style": {},
				"docs": {
					"text": "",
					"files": []
				},
				"children": [
					{
						"css": {},
						"style": {},
						"docs": {
							"text": "",
							"files": []
						},
						"children": [
							{
								"tag": "img",
								"src": "img/menupopup.png",
								"id": "menupopup",
								"isObj": "_menuGeneral",
								"css": {},
								"style": {},
								"docs": {
									"files": []
								}
							}
						],
						"tag": "div",
						"className": "myApp_header_left appElt_default",
						"dn": "displayMyApp_header_left"
					},
					{
						"tag": "div",
						"className": "myApp_header_center appElt_default",
						"css": {
							"flex": 1
						},
						"style": {},
						"docs": {
							"text": "",
							"files": []
						},
						"children": [],
						"dn": "displayMyApp_header_center"
					},
					{
						"tag": "div",
						"className": "myApp_header_right appElt_default",
						"css": {},
						"style": {},
						"docs": {
							"text": "",
							"files": []
						},
						"children": [],
						"dn": "displayMyApp_header_right"
					}
				],
				"tag": "div",
				"className": "myApp_header appElt_default",
				"dn": "measurer_header"
			},
			{
				"css": {
					"flex": 1,
					"display": "flex",
					"flexDirection": "row",
					"minWidth": "1px"
				},
				"style": {},
				"docs": {
					"text": "",
					"files": []
				},
				"children": [],
				"tag": "div",
				"className": "myApp_body appElt_default",
				"dn": "measurer_body"
			},
			{
				"css": {},
				"style": {},
				"docs": {
					"text": "",
					"files": []
				},
				"children": [
					{
						"tag": "toolbar",
						"className": "toolbar",
						"children": [
							{
								"css": {},
								"style": {},
								"docs": {
									"files": []
								},
								"tag": "toolAppli",
								"label": "Measures",
								"icon": "img/measure.png",
								"idObj": "tabMeasure"
							},
							{
								"css": {},
								"style": {},
								"docs": {
									"files": []
								},
								"tag": "toolAppli",
								"label": "Food",
								"icon": "img/food.png",
								"idObj": "tabFood"
							},
							{
								"css": {},
								"style": {},
								"docs": {
									"files": []
								},
								"tag": "toolAppli",
								"label": "Workouts",
								"icon": "img/workouts.png",
								"idObj": "tabSessions"
							}
						],
						"css": {},
						"style": {},
						"docs": {
							"files": []
						}
					}
				],
				"tag": "div",
				"className": "myApp_footer appElt_default",
				"dn": "measurer_footer"
			}
		]
	},
	"tabs": [],
	"x": "10px",
	"y": "134px"
}