var Util = { namespace : function(name) { if ( !name || !name.length ) { return null; } var current = window; var names = name.split("."); for ( var i = 0 ; i < names.length ; i++ ) { current[names[i]] = current[names[i]] || {}; current = current[names[i]]; } }, extend : function(obj, properties) { if ( !obj ) { return; } for ( property in properties ) { obj[property] = properties[property]; } }, trim : function(s) { if ( typeof s != "string" ) { return s; } return s.replace(/^(\s*)([\W\w]*)(\b\s*$)/, '$2'); }, intToString : function(v, nbDigit) { var s = '' + v; if ( v < 0 ) { return s; } var l = nbDigit - s.length; if ( l <= 0 ) { return s; } // insert '0' for ( var i = 0; i < l; i++, s = '0' + s ); return s; }, checkEmail: function(val) { var usr = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")"; var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}"; var regex = "^"+usr+"\@"+domain+"$"; var myrxp = new RegExp(regex); return(myrxp.test(val)); }, addWindowOnload: function(func) { var windowonload = window.onload; window.onload = function() { if( windowonload != null ) { windowonload(); } func(); } }, launchWhenBWisLoaded: function( bw, func) { if( typeof bw == 'string' ) { bw = document.getElementById(bw); } if( !bw.selfclassName ) { setTimeout( function() { Util.util.launchWhenBWisLoaded( bw, func); }, 500); return; } func(); } }; //---------------------------------------------------------------------------> Util.namespace('Util.images'); Util.images = { toPNG: function(img) { img = EL(img); var src = img.getAttribute("source"); if( Util.net.Browser.Instance.isMSIE ) { img.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + src + ')'; img.src=Util.contextPath + 'img/none.gif'; } else { img.src = src; } }, changePNG: function(img, src) { img = EL(img); src = Util.contextPath + src; if( Util.net.Browser.Instance.isMSIE ) { img.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + src + ')'; } else { img.src = src; } }, createPNG : function(url, map, width, height) { var img = document.createElement('img'); if( map != null ) { img.useMap = "#" + map; img.border = "0"; } if( Util.net.Browser.Instance.isMSIE ) { img.src=Util.contextPath + 'img/none.gif'; img.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + url + ')'; } else { img.src=url; } if( width != null ) { img.style.width = width; } if( height != null ) { img.style.height = height; } return img; }, renderPNG : function(url, id, parent, map, width, height) { url = Util.contextPath + url; if( parent != null ) { parent = EL(parent); var img = Util.images.createPNG(url, map, width, height); parent.appendChild(img); if( id != null ) { img.id = id; } } else { var s = " opacEnd) { for(i = opacStart; i >= opacEnd; i--) { setTimeout("Util.util.changeOpacity('" + id + "'," + i + " )",(timer * speed)); timer++; } } else if(opacStart < opacEnd) { for(i = opacStart; i <= opacEnd; i++) { setTimeout("Util.util.changeOpacity('" + id + "'," + i + " )",(timer * speed)); timer++; } } } }; //---------------------------------------------------------------------------> Util.namespace('Util.DOM'); Util.DOM = { toElement : function(e) { if ( typeof e == "string" ) { return document.getElementById(e); } return e; }, getClassNames : function(element) { return EL(element).className.split(/\s+/); }, updateClassName : function(element, classNames) { EL(element).className = classNames.join(' '); }, hasClassName : function(element, className) { var classes = Util.DOM.getClassNames(element); for ( var i = 0 ; i < classes.length ; i++ ) { if ( classes[i] == className ) { return true; } } return false; }, addClassName : function(element, className, multiply) { if ( Util.DOM.hasClassName(element, className) ) { return; } var classes = Util.DOM.getClassNames(element); if ( multiply ) { var l = classes.length; for ( var i = 0 ; i < l ; i++ ) { classes.push(classes[i] + '-' + className); } } classes.push(className); Util.DOM.updateClassName(element, classes); }, removeClassName : function(element, className, multiply) { var classes = Util.DOM.getClassNames(element); var newClasses = new Array(); var reg = new RegExp('-?(' + className + '-|' + className + '$)'); var i, j; for ( i = 0, j = 0; i < classes.length ; i++ ) { if ( !multiply ) { if ( classes[i] != className ) { newClasses[j++] = classes[i]; } } else { if ( !reg.test(classes[i]) ) { newClasses[j++] = classes[i]; } } } Util.DOM.updateClassName(element, newClasses); } }; var EL = Util.DOM.toElement; //---------------------------------------------------------------------------> Util.namespace("Util.net"); Util.net.Browser = function() { this.initialize.apply(this, arguments) }; Util.net.Browser.prototype = { navigator : null, platform : null, userAgent : null, isWin32 : false, isLinux : false, isMac : false, isGecko : false, isFirefox : false, isNetscape : false, isMSIE : false, isSafari : false, isOpera : false, code : null, name : null, majorVersion : 0, minorVersion : 0, minorVersion2 : 0, version : "", /** * The engine inner object */ _Engine : function() { /** * The engine code * (Mozilla, Opera, ...) */ this.code = navigator.appCodeName; /** * The engine version : version + platform + ... */ this.versionString = navigator.appVersion; this.version = parseFloat(this.versionString); /** * The name of the client that implements this engine. */ this.clientName = navigator.appName; }, //--------------------------------------------> /** * Creates a new declared Browser */ initialize : function() { this.navigator = window.navigator; this.Engine = new this._Engine(); this.platform = navigator.platform; this.userAgent = navigator.userAgent; this.isWin32 = (this.platform.indexOf("Win32") >= 0); this.isLinux = (this.platform.indexOf("Linux") >= 0); this.isMac = (this.platform.indexOf("Mac") >= 0); this.isGecko = (this.userAgent.indexOf("Gecko/") >= 0); this.isFirefox = (this.userAgent.indexOf("Firefox/") >= 0); this.isNetscape = (this.userAgent.indexOf("Netscape/") >= 0); this.isMSIE = (this.userAgent.indexOf("MSIE") >= 0); this.isSafari = (this.userAgent.indexOf("Safari/") >= 0); this.isOpera = (this.userAgent.indexOf("Opera") >= 0); if( this.isOpera ) { this.isMSIE = false; } this.code = this.Engine.code; if ( this.isGecko ) this.code = "Gecko"; if ( this.isFirefox ) this.code = "Firefox"; if ( this.isNetscape ) this.code = "Netscape"; if ( this.isMSIE ) this.code = "MSIE"; if ( this.isSafari ) this.code = "Safari"; if ( this.isOpera ) this.code = "Opera"; this.name = this.Engine.clientName; if ( this.isFirefox ) this.name = "Mozilla Firefox"; if ( this.isSafari ) this.name = "Safari" if ( this.isOpera ) this.name = "Opera" /** * The version of the browser */ this.version = "" + this.Engine.version; //------------------------------------ // Detect the version of the browser //------------------------------------ if ( this.code ) { var reg = new RegExp(this.code + '/?\\s?;?([\\d.]*)'); var res = this.userAgent.match(reg); if ( res.length == 2 ) { this.version = res[1]; res = this.version.match(/\d+/g); this.majorVersion = (res[0] ? parseInt(res[0]) : 0); this.minorVersion = (res[1] ? parseInt(res[1]) : 0); this.minorVersion2 = (res[2] ? parseInt(res[2]) : 0); } } } }; Util.net.Browser.Instance = new Util.net.Browser(); //---------------------------------------------------------------------------> Util.namespace('Util.CSS'); Util.CSS = { appendNavigatorInformations : function () { var list = document.getElementsByTagName("html"); if ( list != null && list.length > 0 ) { // presume that only one html tag has been declared var html = list.item(0); // get the browser var browser = Util.net.Browser.Instance; var classNames = Util.DOM.getClassNames(html); classNames.push(browser.isGecko ? "Gecko" : "NotGecko"); classNames.push(browser.isFirefox ? "Firefox" : "NotFirefox"); classNames.push(browser.isNetscape ? "Netscape" : "NotNetscape"); classNames.push(browser.isSafari ? "Safari" : "NotSafari"); classNames.push(browser.isOpera ? "Opera" : "NotOpera"); classNames.push(browser.isMSIE ? "MSIE" : "NotMSIE"); Util.DOM.updateClassName(html, classNames); } } }; Util.CSS.appendNavigatorInformations(); //---------------------------------------------------------------------------> Util.namespace("Util.CSS.events"); Util.CSS.events = { overOn : function(element, multiply) { Util.DOM.addClassName(element, "over", multiply); }, outOf : function(element, multiply) { Util.DOM.removeClassName(element, "over", multiply); }, clickOn : function(element, multiply, toggleSelect) { if ( Util.DOM.hasClassName(element, "clicked") ) { Util.DOM.removeClassName(element, "clicked", multiply); } else { Util.DOM.addClassName(element, "clicked", multiply); } if ( toggleSelect ) { Util.CSS.events.toggleSelect(); } }, toggleSelect : function() { var selects = document.getElementsByTagName('select'); if( selects.length == 0 ) { return; } var visibility = (selects[0].style.visibility == 'hidden') ? 'visible' : 'hidden'; for(var i = 0; i < selects.length ; i ++) { selects.item(i).style.visibility = visibility; } } }; //---------------------------------------------------------------------------> Util.namespace('Util.form'); Util.form = { isEmpty: function(element) { var value = Util.form.getFieldValue(element); if( value == null ) { return true; } return false; }, checkDate: function(value, format) { if( value == null || value.length == 0 || value.split('/').length != 3 ) { return false; } var dayPart; var monthPart; var yearPart; if( format == null || format.split('/').length != 3 ) { format = 'dd/mm/yyyy'; } format = format.toLowerCase(); var formatParts = format.split('/'); function identifyPart(parts, pattern) { for(var i = 0; i < parts.length ; i ++ ) { if( formatParts[i].indexOf(pattern) > -1 ) { return {index: i, length: formatParts[i].length}; } } return null; } dayPart = identifyPart(formatParts, 'dd'), monthPart = identifyPart(formatParts, 'mm'); yearPart = identifyPart(formatParts, 'yy'); var valueParts = value.split('/'); var day = valueParts[dayPart.index]; var month = valueParts[monthPart.index]; var year = valueParts[yearPart.index]; if( day.length != dayPart.length || month.length != monthPart.length || year.length != yearPart.length ) { return false; } var date = new Date(year, parseInt(month, 10) - 1, day); var yearCompare = ( year.length == 2 ) ? date.getYear() : date.getFullYear(); if( date.getDate() != parseInt(day, 10) || date.getMonth() != (parseInt(month, 10) - 1) || yearCompare != parseInt(year, 10) ) { return false; } return true; }, getFieldValue: function(element) { element = EL(element); var value; if( element == null ) { return null; } switch(element.type) { case 'password': case 'textarea': case 'text': { value = element.value; break; } case 'select-one': { value = Util.form.select.getSelectedValue(element); break; } default: if( typeof element == 'object' ) { for(var i = 0; i < element.length ; i ++ ) { if( element[i].checked ) { value = element[i].value; } } } break; } if( value == null || value.length == 0 ) { return null; } return value; } }; Util.namespace('Util.form.select'); Util.form.select = { getSelectedOption : function (element) { return EL(element).options[EL(element).selectedIndex]; }, getSelectedValue : function (element) { return Util.form.select.getSelectedOption(element).value; }, getSelectedText : function (element) { return Util.form.select.getSelectedOption(element).text; }, setSelectedValue : function (element, value) { for(var i = 0; i < EL(element).options.length ; i ++) { var opt = EL(element).options[i]; if( opt.value == value ) { EL(element).selectedIndex = i; break; } } }, clear : function(element) { element = EL(element); while ( element.firstChild != null ) { element.removeChild( element.firstChild ); } }, appendOption : function(element, value, text) { element = EL(element); var o = document.createElement ("option"); o.setAttribute("value", value); o.appendChild( document.createTextNode(text) ); element.appendChild(o); }, appendDisabledOption : function(element, text) { element = EL(element); var o = document.createElement ("optgroup"); o.setAttribute("label", text); o.className = "optdisabled"; element.appendChild(o); }, appendOptions : function (element, data, clear) { element = EL(element); if( clear ) { Util.form.select.clear(element); } for(value in data) { Util.form.select.appendOption(element, value, data[value]); } }, appendDisabledOptions : function (element, data, clear, disabledList) { element = EL(element); if( clear ) { Util.form.select.clear(element); } for(value in data) { if( disabledList[value] ) { Util.form.select.appendDisabledOption(element, data[value]); } else { Util.form.select.appendOption(element, value, data[value]); } } } }; var loadingImage = null; var loadinginprogress = false; var slidesList = null; var currentSlide = 0; var slidesPath = null; var currentImage = null; var resizeX = 0; var resizeY = 0; //Util.addWindowOnload( function() { renderImagePreview(); } ); //renderImagePreview(); function renderImagePreview() { var cache = document.createElement('div'); cache.id = "cache"; var img = document.createElement('div'); img.id = "imgpreview"; var loading = document.createElement('div'); loading.id = "loading"; document.body.appendChild(cache); document.body.appendChild(img); document.body.appendChild(loading); return loading; } function preloadImages(list, path, prefix) { for(a in list) { var c = list[a]; var i = document.createElement('img'); var s = Util.contextPath + path + c; if( prefix ) { s = prefix + s; } i.src = s; } } function preloadImage(url, func) { if( loadingImage == null ) { loadingImage = document.createElement('img'); loadingImage.src = url; //loadingImage.onclick= function() { hidePhoto(); }; } if( loadingImage.complete && loadingImage.width > 0 ) { func(loadingImage); return; } setTimeout( function() { preloadImage(url, func); }, 200); } function showPhoto(photo, slides, path, start, resizex, resizey) { resizeX = resizex; resizeY = resizey; /* if( slides != null && slidesList == null) { slidesList = slides; currentSlide = 0; slidesPath = path; } else if( slides == null ) { slidesList = null; } */ if( slides != null ) { slidesList = slides; if( start ) { currentSlide = 0; } slidesPath = path; } else if( slides == null ) { slidesList = null; } if( loadinginprogress ) { return; } loadinginprogress = true; var img = EL(photo).src; var url; var i = img.indexOf('thumb.jpg?'); if( i == -1 ) { url = img; } else { i = img.indexOf('i='); if( i> -1 ) { url = img.substring(i + 2); } } if( resizeX > 0 && resizeY > 0 ) { var filename = "thumb.jpg?w=" + resizeX + "&h=" + resizeY + "&i=" + url; url = Util.contextPath + filename; } else { url = Util.contextPath + url; } showLoading(); preloadImage(url, function(im){ showZoomPhoto(im); }); } function showLoading(father) { var l = document.createElement('img'); l.src = Util.contextPath + 'img/loading.gif'; l.id = 'loadinggif'; l.style.marginBottom ='10px'; var load; if( father != null ) { load = document.createElement('div'); load.id = "loading2"; father.appendChild(load); } else { load = EL('loading'); if( load == null ) { load = renderImagePreview(); } } load.innerHTML = '
Chargement en cours

'; load.style.display = 'block'; load.appendChild(l); load.onclick = function() { this.style.display = 'none'; loadinginprogress = false; if( loadingImage != null && loadingImage.parentNode != null ) { loadingImage.parentNode.removeChild(loadingImage); } loadingImage = null; } } function showZoomPhoto(im, stop) { var width = document.documentElement.clientWidth; var height = document.documentElement.clientHeight; var preview = EL('imgpreview'); if( Util.net.Browser.Instance.isOpera ) { height =hauteur_fenetre(); width = largeur_fenetre() } EL('loading').style.display = 'none'; EL('site').className = 'opac'; EL('body').style.overflow = 'hidden'; EL('body').style.height = height + 'px'; if( !Util.net.Browser.Instance.isMSIE ) { EL('cache').style.width = (width + 20) + 'px'; EL('cache').style.height = (height + 20) + 'px'; } else { EL('cache').style.width = width + 'px'; EL('cache').style.height = (height+10) + 'px'; } if( slidesList != null && slidesList.length > 1 ) { var imHeight = 470; var imWidth = 460; } else { var imWidth = im.width; var imHeight = im.height + 20; } preview.style.height = (imHeight + 0) + 'px'; if( !Util.net.Browser.Instance.isMSIE || stop) { document.body.onresize = function() { showZoomPhoto(im) }; onresize = function() { showZoomPhoto(im) }; var s = ''; if( slidesList != null && slidesList.length > 1 ) { s += '
Photo Précédente
'; } //var style = (slidesList != null && slidesList.length > 1 ) ? 'width:' + imWidth + 'px;' : ''; var style = 'width:' + imWidth + 'px;'; if( Util.net.Browser.Instance.isMSIE && slidesList == null ) { style += " margin-top: -8px;" } if( slidesList != null && slidesList.length > 1 ) { s += '
Photo Suivante
'; } s += '
Fermer
'; var links = document.createElement('div'); links.id = 'previewlinks'; links.innerHTML = s; links.style.width = imWidth + 'px'; preview.appendChild(links); var o = document.createElement('div'); o.style.clear = 'both'; preview.appendChild(o); if( !Util.net.Browser.Instance.isOpera ) { EL('cache').style.display = 'inline'; } } if( Util.net.Browser.Instance.isMSIE ) { if( stop) { preview.style.left = (width - imWidth + 20) / 2 + 'px'; preview.style.top = ((height/2) -(imHeight / 2) ) + 'px'; appendImagePreview(preview, im); preview.style.display = "inline"; } else { preview.style.left = '-1000px'; } } else { preview.style.left = (width - imWidth + 20) / 2 + 'px'; preview.style.top = ((height/2) -(imHeight / 2) ) + 'px'; appendImagePreview(preview, im, stop); preview.style.display = "inline"; } if( !Util.net.Browser.Instance.isFirefox ) { if( stop ) { currentImage = im; return; } setTimeout(function() { showZoomPhoto(im, true) }, 50); return; } currentImage = im; } function appendImagePreview(div, im) { if( slidesList != null && slidesList.length > 1 ) { var pc = document.createElement('div'); pc.className = 'photocontainer'; pc.style.width = '450px'; pc.style.height = '460px'; var s = ''; var padding = (Util.net.Browser.Instance.isMSIE) ? '5px' : '0px'; s += '
'; s += '
'; s += '
'; pc.innerHTML = s; div.style.height = "490px"; div.appendChild(pc); } else { div.appendChild(im); im.onclick = function() {hidePhoto();} } } function getRelX(elt) { return (elt.x) ? elt.x : getRelPos(elt,"Left"); } function getRelY(elt) { return (elt.y) ? elt.y : getRelPos(elt,"Top"); } function getRelPos(elt,which) { return elt["offset" + which]; } function previousPhoto() { if( slidesList.length == 0 || currentImage == null) { return; } currentSlide --; if( currentSlide < 0 ) { currentSlide = slidesList.length - 1; } changeImage(); } function changeImage() { var filename = slidesList[currentSlide]; var url; if( resizeX > 0 && resizeY > 0 ) { filename = "thumb.jpg?w=" + resizeX + "&h=" + resizeY + "&i=" + slidesPath + filename; url = Util.contextPath + filename; } else { url = Util.contextPath + slidesPath + filename; } var content = EL('imgpreview'); content.style.width = (content.clientWidth -10) + 'px'; clearPhoto(); loadingImage = null; showLoading(EL('imgpreview')); if( !Util.net.Browser.Instance.isMSIE ) { EL('loading2').style.left = ((content.clientWidth-150)/2 ) + 'px'; } EL('loading2').style.top = ((content.clientHeight-83)/2 ) + 'px'; preloadImage(url, function(im){ clearPhoto(); showZoomPhoto(im, true) }); } function clearPhoto() { var content = EL('imgpreview'); while( content.childNodes.length > 0 ) { content.removeChild(content.childNodes[0]); } } function nextPhoto() { if( slidesList.length == 0 || currentImage == null) { return; } currentSlide ++; if( currentSlide >= slidesList.length ) { currentSlide = 0; } changeImage(); } function hidePhoto() { loadinginprogress = false; var content = EL('imgpreview'); while( content.childNodes.length > 0 ) { content.removeChild(content.childNodes[0]); } loadingImage = null; content.style.display = "none"; EL('site').className = ''; EL('cache').style.display = 'none'; EL('body').style.overflow = 'visible'; document.body.onresize = function(){ return false;}; onresize = function(){ return false;}; } function largeur_fenetre() { if (window.innerWidth) return window.innerWidth; else if (document.body && document.body.offsetWidth) return document.body.offsetWidth; else return 0; } function hauteur_fenetre() { if (window.innerHeight) return window.innerHeight ; else if (document.body && document.body.offsetHeight) return document.body.offsetHeight; else return 0; } function navOn(n) { var link = EL(n + '_link'); var img = EL(n + '_img'); if( link == null) { return; } //Util.images.changePNG(img, 'img/' + n + '_on.png'); Util.CSS.events.overOn(link); } function navOff(n) { var link = EL(n + '_link'); var img = EL(n + '_img'); if( link == null) { return; } //Util.images.changePNG(img, 'img/' + n + '.png'); Util.CSS.events.outOf(link); }