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 = "";
document.write(s);
}
},
changeOpacity: function(id, opacity)
{
if( EL(id) == null )
{
return;
}
var object = EL(id).style;
object.opacity = (opacity / 100);
object.MozOpacity = (opacity / 100);
object.filter = "alpha(opacity=" + opacity + ")";
},
fading: function(id,opacStart,opacEnd,millisec)
{
if( EL(id) == null )
{
return;
}
//speed for each frame
var speed = Math.round(millisec / 100);
var timer = 0;
//determine the direction for the blending, if start and end are the same nothing happens
if(opacStart > 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 += '