// #################################################################################
// ID-3 ASP Library
// Javascript Universal Include File
// (c) 2002 ID-3 Technologies inc. All right reserved
// #################################################################################


// #################################################################################
// ID3ASP_AddMask
// #################################################################################
function ID3ASP_AddMask(strMask,obj){
	var oMask = new ID3ASP_MaskObj(obj);

	oMask.Init(strMask);
	obj.ID3MaskObj = oMask;

	oMask = null;
}
	
	
	
// #################################################################################
// ID3ASP_ApplyComboBox
// #################################################################################
function ID3ASP_ApplyComboBox(obj){	
	var oComboBox = new ID3ASP_ComboBoxObj(obj);
	obj.ID3ComboBoxObj = oComboBox;
	document.selection.createRange().moveStart('character',obj.value.length);
}



// #################################################################################
// ID3ASP_ApplyMask
// #################################################################################
function ID3ASP_ApplyMask(strMask,obj){
	var arrWks
	var sObjValue = '';

	ID3ASP_AddMask(strMask,obj);

	//Formattage du contenu de l'objet si nécessaire
	arrWks = obj.ID3MaskObj.Workspaces

	sObjValue = arrWks[0].StrBefore;

	for (var i=0;i<arrWks.length;i++){

		switch (arrWks[i].Range){
			case '-':
				if (arrWks[i].Content.length < 1){
					arrWks[i].Content = '_';}
				break;
			case '+':
				if (arrWks[i].Content.length < arrWks[i].RangeNum){
					arrWks[i].Content += ID3ASP_RepeatStr('_',arrWks[i].RangeNum - arrWks[i].Content.length)}
				break;
			case '=':
				if (arrWks[i].Content.length < arrWks[i].RangeNum){
					arrWks[i].Content += ID3ASP_RepeatStr('_',arrWks[i].RangeNum - arrWks[i].Content.length)}

				if (arrWks[i].Format == 'm'){
					var sNewContent = '';
					for (var j=0;j<arrWks[i].RangeNum;j++){
						if( obj.ID3MaskObj.IsMasked(i,j) ){
							sNewContent += arrWks[i].Content.charAt(j);}
						else{
							sNewContent += arrWks[i].RegExp.charAt(j);}
					}

					arrWks[i].Content = sNewContent;
				}
				break;
		}
		sObjValue += arrWks[i].Content + arrWks[i].StrAfter;
	}

	obj.value = sObjValue;

	ID3ASP_SeekWorkspace(obj);
}



// #################################################################################
// ID3ASP_AttachCalendar
// #################################################################################
function ID3ASP_AttachCalendar(obj,strFieldName,strMonthList,strWeekdayList){
	var oNest = document.getElementById('Nest' + strFieldName);
	obj.ID3CalendarObj = new ID3ASP_CalendarObj(obj,oNest,strFieldName,strMonthList,strWeekdayList,'ID3CalendarFix');
}
 


// #################################################################################
// ID3ASP_AutoComplete
// #################################################################################
function ID3ASP_AutoComplete(obj,sList) {
	var aListItems = new Array();
	var oTextRange = obj.createTextRange();
	var sOldValue = obj.value
	var bItemFound = false
				
	if (((event.keyCode > 47)||(event.keyCode == 39))) {
		sList = new String(sList);		
		aListItems = sList.split("|")
		
		ItemSearch:
		for (var i=0;i<aListItems.length;i++) {
			if (aListItems[i].indexOf(sOldValue,0)==0) {
				obj.value = aListItems[i];
				bItemFound = true;
				break ItemSearch;
		}
	}
			
		if (bItemFound) {
			oTextRange.moveStart('character',sOldValue.length)
			oTextRange.select();
			// window.setTimeout('lf_EnabledAutoComplete()',300);
		}
	}
}


// #################################################################################
// ID3ASP_CalendarObj
// #################################################################################
function ID3ASP_CalendarObj(obj,objNest,strFieldName,strMonthList,strWeekdayList,sType){
	this.Type				= sType		//'ID3CalendarPopUp' 'ID3CalendarButtonPopUp' 'ID3CalendarFix'
	this.Nest				= objNest;
	this.Parent				= obj;
	this.DayBox				= ID3ASP_GetElementByName(obj.parentNode,strFieldName + '_D');
	this.MonthBox			= ID3ASP_GetElementByName(obj.parentNode,strFieldName + '_M');
	this.YearBox			= ID3ASP_GetElementByName(obj.parentNode,strFieldName + '_Y');
	this.ActiveDate			= new Date();
	this.MonthList			= strMonthList.split(';');
	this.WeekdayList		= strWeekdayList.split(';');
	this.ActiveYear;	
	this.ActiveMonth;		
	this.ActiveDayOfMonth;
	this.CurMonth;
	this.CurYear;
	this.uniqueID = obj.uniqueID;

	//Déclaration des méthodes de l'objet
	if (typeof(_ID3ASP_CalendarObj_prototype_called) == 'undefined'){
		_ID3ASP_CalendarObj_prototype_called = true;

		ID3ASP_CalendarObj.prototype.Build = Build;
		ID3ASP_CalendarObj.prototype.Draw = Draw;
		ID3ASP_CalendarObj.prototype.DecMonth = DecMonth;
		ID3ASP_CalendarObj.prototype.DecYear = DecYear;
		ID3ASP_CalendarObj.prototype.Hide = Hide;
		ID3ASP_CalendarObj.prototype.IncMonth = IncMonth;
		ID3ASP_CalendarObj.prototype.IncYear = IncYear;
		ID3ASP_CalendarObj.prototype.Show = Show;
		
		// Event
		ID3ASP_CalendarObj.prototype.onClassInit = onClassInit;
		ID3ASP_CalendarObj.prototype.onDateSelect = onDateSelect;
		ID3ASP_CalendarObj.prototype.onMouseOut = onMouseOut;
		ID3ASP_CalendarObj.prototype.onMouseOver = onMouseOver;
	}
	
	function Build(iMonth, iYear){						
		var dNewDate	= new Date(iYear, iMonth, 1);
		var dPrevDate	= new Date(iYear, iMonth + 1, 0);
		var iDayOfFirst = dNewDate.getDay();
		var iDaysInMonth = dPrevDate.getDate();
		var iVarDate = 1;
		var aMonth = new Array();
		
		aMonth[0] = new Array(7);aMonth[1] = new Array(7);aMonth[2] = new Array(7);
		aMonth[3] = new Array(7);aMonth[4] = new Array(7);aMonth[5] = new Array(7);
		aMonth[6] = new Array(7);
			
		//Fixation de l'entête des jours
		aMonth[0][0] = this.WeekdayList[0].charAt(0).toUpperCase();aMonth[0][1] = this.WeekdayList[1].charAt(0).toUpperCase();
		aMonth[0][2] = this.WeekdayList[2].charAt(0).toUpperCase();aMonth[0][3] = this.WeekdayList[3].charAt(0).toUpperCase();
		aMonth[0][4] = this.WeekdayList[4].charAt(0).toUpperCase();aMonth[0][5] = this.WeekdayList[5].charAt(0).toUpperCase();
		aMonth[0][6] = this.WeekdayList[6].charAt(0).toUpperCase();
			
		//Construction de la première semaine
		for (var d = iDayOfFirst; d < 7; d++){
			aMonth[1][d] = iVarDate;
			iVarDate++;
		}
		
		for (var w = 2; w < 7; w++){
			for (d = 0; d < 7; d++){
				if (iVarDate <= iDaysInMonth) {
					aMonth[w][d] = iVarDate;
					iVarDate++;}
			}
		}
		return (aMonth);
	}	

	function Draw(iMonth,iYear){
		var sHTML = new String();
		var aThisMonth = this.Build(iMonth,iYear);
		var iCellWidth = 15;
		
		sHTML = "<table border=0 cellspacing=1 cellpadding=0 width=100%>";
		sHTML += "<tr><td colspan=7><table border=0 cellspacing=0 width=100%><tr><td width=50%>"
		sHTML += "<input class='ID3ASP_Button' type=button value='<<' onClick='ID3ASP_GetElementByUniqueID(document.body,&quot;"+ this.uniqueID +"&quot;).ID3CalendarObj.DecMonth();'>"
		sHTML += " <SPAN class='ID3ASP_Month'>" + this.MonthList[iMonth] + "</SPAN> ";
		sHTML += "<input class='ID3ASP_Button' type=button value='>>' onClick='ID3ASP_GetElementByUniqueID(document.body,&quot;"+ this.uniqueID +"&quot;).ID3CalendarObj.IncMonth();'>"
		sHTML += "</td><td align=right width=50%>"
		sHTML += "<input class='ID3ASP_Button' type=button value='<<' onClick='ID3ASP_GetElementByUniqueID(document.body,&quot;"+ this.uniqueID +"&quot;).ID3CalendarObj.DecYear();'>"
		sHTML += " <SPAN class='ID3ASP_Year'>" + iYear + " "
		sHTML += "<input class='ID3ASP_Button' type=button value='>>' onClick='ID3ASP_GetElementByUniqueID(document.body,&quot;"+ this.uniqueID +"&quot;).ID3CalendarObj.IncYear();'>"
		
		if (this.Type != 'ID3CalendarFix'){
			sHTML += "</td><td><input class='ID3ASP_Button' type=button value='X' onClick='ID3ASP_GetElementByUniqueID(document.body,&quot;"+ this.uniqueID +"&quot;).ID3CalendarObj.Hide()'>";}
			
		sHTML += "</td></tr></table></td></tr>"			
			
		for (var w = 0; w < 7; w++) {
			if (w==0){
				sHTML += "<tr align='center' bgColor=steelBlue>";
				for (var d = 0; d < 7; d++) {
					sHTML += "<td class='ID3ASP_Weekday' width='" + (100 / 7) + "%'>" + aThisMonth[0][d] + "</td>";
				}
			}
			else{
				sHTML += "<tr align='center'>"

				for (var d = 0; d < 7; d++) {
					//Vérification de la date passé en paramètre
					var sClassName = 'ID3ASP_DayCelEnabled';
					var sToggleClass = 'ID3ASP_DayCelEnabledOver';
					if ( (iMonth == this.ActiveMonth) && (iYear == this.ActiveYear) && (aThisMonth[w][d] == this.ActiveDayOfMonth) ){
						sToggleClass = 'ID3ASP_DayCelSelectedOver'
						sClassName = 'ID3ASP_DayCelSelected';}
						
					sHTML += "<td width='" + (100 / 7) + "%' height='15' style='CURSOR:Hand;' " 
					sHTML += "onMouseOver='ID3ASP_ToggleClassOn(this,&quot;" + sToggleClass + "&quot;)'"
					sHTML += "onMouseOut='ID3ASP_ToggleClassOff(this)' ";
						
					if (isNaN(aThisMonth[w][d]) == false) {
						sHTML += " class='" + sClassName + "' onClick='ID3ASP_GetElementByUniqueID(document.body,&quot;"+ this.uniqueID +"&quot;).ID3CalendarObj.onDateSelect(" + aThisMonth[w][d] + ")'>"
						sHTML += aThisMonth[w][d];
					}
					else{
						sHTML += " class='ID3ASP_DayCelDisabled'>";}	
						
					sHTML += "</td>";
				}
			}
			sHTML += "</tr>";
		}
		
		sHTML += "</table>";

		this.Nest.innerHTML = '';
		this.Nest.innerHTML = sHTML;
		aThisMonth = null;
		sHTML = null;
	}
	
	function DecMonth(){
		this.CurMonth--;
		if (this.CurMonth < 0){
			this.CurMonth = 11;
			this.CurYear--;}
			
		this.Draw(this.CurMonth,this.CurYear);	
	}
	
	function DecYear(){
		this.CurYear--;
		this.Draw(this.CurMonth,this.CurYear);	
	}
	
	function Hide(){
		ID3ASP_ShowHideSelect('visible');
		this.Nest.style.visibility = 'hidden';
		this.Parent.ID3CalendarObj = null;
		this.Parent.ID3bObjAttached = 'undefined';
	}
	
	function IncMonth(){
		this.CurMonth++;
		if (this.CurMonth > 11){
			this.CurMonth = 0;
			this.CurYear++;}
			
		this.Draw(this.CurMonth,this.CurYear);
	}
	
	function IncYear(){
		this.CurYear++;
		this.Draw(this.CurMonth,this.CurYear);
	}
	
	function Show(){
		this.Nest.style.backgroundColor = 'white';
		this.Nest.className = 'ID3ASP_Calendar'

		if (this.Type != 'ID3CalendarFix'){
			this.Nest.style.position = 'absolute';
			this.Nest.style.visibility = 'visible';
			this.Nest.style.left = this.Parent.offsetLeft;
			this.Nest.style.top = this.Parent.offsetTop + this.Parent.offsetHeight;
		}
		
		ID3ASP_ShowHideSelect('hidden',this.Nest.style.top,this.Nest.style.left,this.Nest.offsetWidth,this.Nest.offsetHeight)
	}
		
	//---------------------------------------------------
	// EVENT
	//---------------------------------------------------
	function onClassInit(){
		var iMonth;
		
		switch (this.MonthBox.type){
			case 'hidden':
			case 'text':
				if (isNaN(this.MonthBox.value) == false){
					iMonth = this.MonthBox.value - 1;}
				break;
			case 'select-one':
				if (isNaN(this.MonthBox.options[this.MonthBox.selectedIndex].value) == false){
					iMonth = this.MonthBox.options[this.MonthBox.selectedIndex].value - 1;}
				else{
					iMonth = '';}
				break;
		}
		
		if ( (this.YearBox.value == '') || (this.DayBox.value == '') || (iMonth == '') ){
			var oDate = new Date();}
		else{
			var oDate = new Date(this.YearBox.value,iMonth,this.DayBox.value);}
		
		this.ActiveYear			= oDate.getFullYear();
		this.ActiveMonth		= oDate.getMonth();
		this.ActiveDayOfMonth	= oDate.getDate();
		this.CurMonth			= oDate.getMonth();
		this.CurYear			= oDate.getFullYear();
		
		this.Draw(this.ActiveMonth,this.ActiveYear);
		
		this.Show();
	}
	
	function onDateSelect(iDay){
		//lf_Debug('type',this.MonthBox.type)	
		switch(this.MonthBox.type){
			case 'hidden':
			case 'text':
				this.MonthBox.value	= this.CurMonth + 1;
				break;
			case 'select-one':
				for (var i=0; i<this.MonthBox.options.length;i++){
					if (this.MonthBox.options[i].value == (this.CurMonth + 1) ){
						this.MonthBox.options[i].selected = true;
					}
				}
				break;
		}
		
		this.YearBox.value		= this.CurYear;
		this.DayBox.value		= iDay;
		
		if (this.Type != 'ID3CalendarFix'){
			this.Hide();}
		else{
			this.onClassInit();}
	}
	
	function onMouseOut(){
		this.Hide();
	}

	function onMouseOver(){
	}
	
	this.onClassInit();
}





// #################################################################################
// ID3ASP_CheckIfEmpty
// #################################################################################
function ID3ASP_CheckIfEmpty( oField, sErrorMessage ) {
	var OK = true;
	var bSelected,i;
	var oOldClass;
	
	if ((oField.length != undefined) && (oField[0].type != undefined)) {
		bSelected = false;
		for (i = 0;i < oField.length;i++) {
			switch(oField[i].type) {
				case "checkbox" :
							bSelected = bSelected || oField[i].checked
						break;
			}
		}
		if (!bSelected) {
			OK = false;
		}
	}
	else {
		switch(oField.type) {
			case "text" :
			case "textarea" :
						if (oField.value.length < 1) 
							OK = false;
						break;
			case "select-one" :
						if ((oField.options[oField.selectedIndex].value == "#NULL#") || (oField.options[oField.selectedIndex].value == "")) 
							OK = false;
						break;
		}
	}

	if (!OK) {
		oField.focus();
		oOldClass = oField.className;
		oField.className = "ID3ASP_ErrorFieldRequired";
		alert(sErrorMessage);
		oField.className = oOldClass;
	}

	return(OK)
}

// #################################################################################
// ID3ASP_ComboBoxObj
// #################################################################################
function ID3ASP_ComboBoxObj(Obj)
{
	this.Parent		= Obj;
	this.Nest		= ID3ASP_GetElementByID(Obj.parentNode,Obj.name + '_ListBoxDiv');
	this.List		= ID3ASP_GetElementByName(Obj.parentNode,Obj.name + '_ListBox');
	this.NewValue	= String();
	this.OldValue	= String();
	this.UniqueID	= Obj.uniqueID;
	this.bCloseList = false;
	
	//Déclaration des méthodes de l'objet
	if (typeof(_ID3ASP_ComboBoxObj_prototype_called) == 'undefined'){
		_ID3ASP_ComboBoxObj_prototype_called = true;

		ID3ASP_ComboBoxObj.prototype.CloseList = CloseList;
		ID3ASP_ComboBoxObj.prototype.HideList = HideList;
		ID3ASP_ComboBoxObj.prototype.Search = Search;
		ID3ASP_ComboBoxObj.prototype.UpdateFromList = UpdateFromList;
		ID3ASP_ComboBoxObj.prototype.ShowList = ShowList;
			
		//Event
		ID3ASP_ComboBoxObj.prototype.ClassInit = ClassInit;
		ID3ASP_ComboBoxObj.prototype.KeyPress = KeyPress;
		ID3ASP_ComboBoxObj.prototype.KeyDown = KeyDown;
		ID3ASP_ComboBoxObj.prototype.KeyUp = KeyUp;
			
		ID3ASP_ComboBoxObj.prototype.ListClick = ListClick;
		ID3ASP_ComboBoxObj.prototype.ListDblClick = ListDblClick;
		ID3ASP_ComboBoxObj.prototype.ListKeyUp = ListKeyUp;
	}
	
	function CloseList(bClose){
		this.bCloseList = bClose;
		if(bClose){
			window.setTimeout('ID3ASP_GetElementByUniqueID(document.' + this.Parent.form.name + ',"' + this.UniqueID + '").ID3ComboBoxObj.HideList()',200)
		}
	}
		
	function HideList(){
		if (this.bCloseList){
			ID3ASP_ShowHideSelect('visible');
			this.List.style.visibility = 'inherit'
			this.Nest.style.visibility = 'hidden';
		}
	}
				
	function Search(sValue){
		var bItemFound = false;
		var oSL = new ID3ASP_SelectListObj(this.List);
			
		this.ShowList();
			
		ItemSearch:
		for (var i=0;i<oSL.Count;i++){
			if (oSL.Items(i).value.indexOf(sValue,0)==0){
				this.NewValue = oSL.Items(i).value;
				oSL.SelectIndex(i);
				bItemFound = true;
				break ItemSearch;
			}
		}
			
		return(bItemFound);
	}
		
	function ShowList(){
			
		this.Nest.style.left = this.Parent.offsetLeft;
		this.Nest.style.top = this.Parent.offsetTop + this.Parent.offsetHeight;
		this.Nest.style.height = '';
		this.List.style.width = this.Parent.offsetWidth
		
		ID3ASP_ShowHideSelect('hidden',this.Nest.style.top,this.Nest.style.left,this.Parent.offsetWidth,this.List.offsetHeight);
		this.List.style.visibility = 'inherit';
		this.Nest.style.visibility = 'visible';
	}
	
	function UpdateFromList(){
		var oSL = new ID3ASP_SelectListObj(this.List)
						
		if (oSL.SelectedIndex == -1){
			oSL.SelectIndex(0);}
				
		this.Parent.value = oSL.Value;
		
	}
		
	//EVENT
	function ClassInit(){
		this.List.ID3Ref = this;
		this.ShowList();
	}

	function KeyPress(){
		return(true)
	}
		
	function KeyUp(){
		var oSL				= new ID3ASP_SelectListObj(this.List)
		
		if (event.keyCode > 47){
			if (this.Search(this.Parent.value)){
				this.OldValue	= this.Parent.value;
				this.Parent.value = this.NewValue;
				ID3ASP_SelectRange(this.OldValue.length,this.Parent.value.length,this.Parent);
			}
			else{
				oSL.DeselectAll();
				return(false);
			}
				
		}
		oSL = null;
		return(true);
	}
		
	function KeyDown(){
		var bReturn = false;
			
		switch (event.keyCode){
			case 9:	// Tab
				if (event.shiftKey == false){
					ID3ASP_ShowHideSelect('visible');
					ID3ASP_ToNextField(this.List);}
				else{
					ID3ASP_ToPreviousField(this.Parent);}
				break;
			case 33:
			case 38: // Up
			case 34:
			case 40: // Down
				this.List.focus();
				break;
			default:
				bReturn = true;
		}
		
		return(bReturn);
	}
		
	function ListKeyUp(){
		this.UpdateFromList();
		
		switch (event.keyCode){
			case 9:	// Tab
				if (event.shiftKey == false){
					ID3ASP_ToNextField(this.List);}
				else{
					ID3ASP_ToPreviousField(this.Parent);}
				break;
			case 13:
				this.Parent.focus();
				break;
		}			
	}
		
	function ListClick(){
		this.UpdateFromList();
	}

	function ListDblClick(){
		this.UpdateFromList();
		this.Parent.focus();
		this.Parent.blur();
	}

	
	this.ClassInit();
}

// #################################################################################
// ID3ASP_GetCursorPos
// #################################################################################
function ID3ASP_GetCursorPos(obj)
{
	var oTR = document.selection.createRange()

	oTR.moveEnd('character',obj.value.length);

	var iPos = obj.value.length - oTR.text.length + 1;
	oTR = null;

	return (iPos)
}

// #################################################################################
// ID3ASP_GenerateUniqueIDs
// #################################################################################
function ID3ASP_GenerateUniqueIDs(objParent,iStartID,iLevel){
	var oChild = objParent.childNodes;
		
	for (var i=0;i<oChild.length;i++){
		if (String(oChild[i].uniqueID) == 'undefined'){
			if (oChild[i].nodeType != 3){
			oChild[i].uniqueID = new String('ms__id' + iStartID);
			iStartID++;}
		}
					
		if (oChild[i].hasChildNodes() == true){
			iStartID = ID3ASP_GenerateUniqueIDs(oChild[i],iStartID + 1,iLevel + 1);}
	}
		
	return (iStartID);
}
	
// #################################################################################
// ID3ASP_GetElementByName
// #################################################################################
function ID3ASP_GetElementByName(objParent,sName){
	var oElement;
	var oChild = objParent.childNodes;
		
	for (var i=0;i<oChild.length;i++){
		if (oChild[i].hasChildNodes()){
			oElement = ID3ASP_GetElementByName(oChild[i],sName);}
			if (oElement != null){
				return(oElement);}
				
		if ( (oChild[i].name == sName) || (oChild[i].id == sName) ){
			return (oChild[i]);}
	}
		
	return (null);
}

// #################################################################################
// ID3ASP_GetElementByID
// #################################################################################
function ID3ASP_GetElementByID(objParent,sName){
	var oElement;
	var oChild = objParent.childNodes;
		
	for (var i=0;i<oChild.length;i++){
		if (oChild[i].hasChildNodes()){
			oElement = ID3ASP_GetElementByName(oChild[i],sName);}
			if (oElement != null){
				return(oElement);}
				
		if ( (oChild[i].id == sName) ){
			return (oChild[i]);}
	}
		
	return (null);
}
	
// #################################################################################
// ID3ASP_GetElementByUniqueID
// #################################################################################
function ID3ASP_GetElementByUniqueID(objParent,iUniqueID){
	var oElement;
	var oChild = objParent.childNodes;
		
	for (var i=0;i<oChild.length;i++){
		if (oChild[i].hasChildNodes()){
			oElement = ID3ASP_GetElementByUniqueID(oChild[i],iUniqueID);}
			if (oElement != null){
				return(oElement);}
				
		if (String(oChild[i].uniqueID) == String(iUniqueID)){
			return (oChild[i]);}
	}
		
	return (null);
}

// #################################################################################
// ID3ASP_LimitRange
// #################################################################################
function ID3ASP_LimitRange(sValue,MinValue,MaxValue){
	
	if (sValue < MinValue){
		sValue = MinValue;}
	else if (sValue > MaxValue){
		sValue = MaxValue;}
			
	return (sValue);
}

// #################################################################################
// ID3ASP_LockKey
// #################################################################################
function ID3ASP_LockKey(sRegExp){
	var rCompareExp = new RegExp(sRegExp);
	var sChar = String.fromCharCode(event.keyCode);
		
	if (sChar.search(sRegExp) < 0){
		return(false);
	}
	return(true);
}

// #################################################################################
// ID3ASP_MaskObj
// #################################################################################
function ID3ASP_MaskObj(Obj)
{
	this.CurrentWks	= 1;
	this.CursorPos = ID3ASP_GetCursorPos(Obj) - 1;
	this.LastEvent = event.type;
	this.Mask = '';
	this.Parent = Obj;
	this.Workspaces = new Array();

	//Déclaration des méthodes de l'objet
	if (typeof(_ID3ASP_MaskObj_prototype_called) == 'undefined'){
		_ID3ASP_MaskObj_prototype_called = true;

		ID3ASP_MaskObj.prototype.AddWorkspace = AddWorkspace;
		ID3ASP_MaskObj.prototype.CursorIsIn = CursorIsIn;
		ID3ASP_MaskObj.prototype.Init = Init;
		ID3ASP_MaskObj.prototype.IsMasked = IsMasked;
		ID3ASP_MaskObj.prototype.MoveCursorLeft = MoveCursorLeft;
		ID3ASP_MaskObj.prototype.MoveCursorRight = MoveCursorRight;
		ID3ASP_MaskObj.prototype.ParseMask = ParseMask;
		ID3ASP_MaskObj.prototype.SelectWorkspace = SelectWorkspace;
		ID3ASP_MaskObj.prototype.SetWorkspace = SetWorkspace;

		//Event
		ID3ASP_MaskObj.prototype.KeyDown = KeyDown;
		ID3ASP_MaskObj.prototype.KeyPress = KeyPress;
	}

	function AddWorkspace(iPosStart,iPosStop){
		var objNewWks = new ID3ASP_WorkspaceObj(this);

		objNewWks.PosStart = iPosStart - 1;
		objNewWks.PosStop = iPosStop + 1;
		objNewWks.EscChar = this.Mask.charAt(iPosStop + 1);
		objNewWks.Mask = this.Mask.substring(iPosStart,iPosStop);
		objNewWks.Init();

		this.Workspaces[this.Workspaces.length] = objNewWks;
	}

	function CursorIsIn(iCurPos,iWksToCheck){
		//On trouve d'abord le Wks dans la boite d'entrée
		var iWksStart	= 0, iWksStop = 0;
		var iStart		= this.Workspaces[iWksToCheck].PosStart;
		var iStop		= this.Workspaces[iWksToCheck].PosStop;			
		var sBefore		= this.Workspaces[iWksToCheck].StrBefore;
		var sAfter		= this.Workspaces[iWksToCheck].StrAfter;
		var sContent	= this.Workspaces[iWksToCheck].Content;

		for (var i = 0;i<iWksToCheck;i++){
			iWksStart = this.Parent.value.indexOf(sBefore + sContent + sAfter,iWksStart) + sBefore.length;			
			if (this.Parent.value.indexOf(sBefore + sContent + sAfter,iWksStart) < 0){
				break;}
		}

		iWksStop = iWksStart + sContent.length;

		//On vérifie si le curseur est dedans
		if ( (iCurPos >= iWksStart) && (iCurPos <= iWksStop) ){
			return (true);}
		else{
			return (false);}
	}

	function IsMasked(iWks,iPos){
		var regIsMasked = new RegExp('[aAlLU0]','g');
		var strSearch = this.Workspaces[iWks].RegExp.charAt(iPos);

		if (strSearch.search(regIsMasked) == 0){
			return (true);}
		else{
			return (false);}
	}

	function Init(strMask){
		var iStartSearch = 0;
		var iContentStart = 0,iContentStop = 0;

		this.Mask		= strMask;
		this.Workspaces = new Array();
		this.ParseMask();

		for (var i=0;i<this.Workspaces.length;i++){
			var iStart	= this.Workspaces[i].PosStart;
			var iStop	= this.Workspaces[i].PosStop;

			//On trouve le contenu de chaque Wks
			sBefore = this.Mask.substring(iStartSearch,iStart);
			if (this.Mask.indexOf('[',iStop) < 0){
				sAfter = this.Mask.substr(iStop);}
			else{
				sAfter = this.Mask.substring(iStop,this.Mask.indexOf('[',iStop));}

			this.Workspaces[i].StrBefore = sBefore
			this.Workspaces[i].StrAfter = sAfter

			if (i==0){
				if (sAfter.length < 1){
					this.Workspaces[i].Content = this.Parent.value.substr(this.Parent.value.indexOf(sBefore) + sBefore.length);}
				else{
					this.Workspaces[i].Content = this.Parent.value.substring(this.Parent.value.indexOf(sBefore) + sBefore.length,this.Parent.value.indexOf(sAfter,iStart) );}
			}
			else{
				var iStartIndex = 0;
				for (var j=0;j<i;j++)
				{
					iStartIndex += this.Workspaces[j].StrBefore.length + this.Workspaces[j].Content.length;
				}

				if (sAfter.length < 1){
					this.Workspaces[i].Content = this.Parent.value.substr(iStartIndex + sBefore.length);}
				else{
					this.Workspaces[i].Content = this.Parent.value.substring(iStartIndex + sBefore.length,this.Parent.value.indexOf(sAfter,iStartIndex + sBefore.length) );}
			}

			iStartSearch = iStop;
		}
	}

	//------------------------------------------------------------
	// MoveCursorLeft
	//  retourne vrai si le déplacement à été effectué avec succès
	//------------------------------------------------------------
	function MoveCursorLeft(){ 
		var iCurPos = ID3ASP_GetCursorPos(this.Parent);
		//On demande d'abord au Wks si le curseur peut se déplacer unitairement
		//Si oui, on déplace le curseur d'une seul position

		if (this.Workspaces[this.CurrentWks].Format == 'm'){
			//Si ce n'est pas le dernier caractère
			if (this.Workspaces[this.CurrentWks].Content.length > this.Workspaces[this.CurrentWks].CurPos){
				this.Workspaces[this.CurrentWks].CurPos++;
				ID3ASP_SelectRange(iCurPos,iCurPos + 1,this.Parent);
				if (!this.IsMasked(this.CurrentWks,this.Workspaces[this.CurrentWks].CurPos - 1) ){
					return(this.MoveCursorLeft())}
			}
			else{
				return (this.SelectWorkspace(this.CurrentWks + 1) );}
		}
		//Si non, on passe au prochain workspace si possible
		else{
			this.CursorPos = 0;
			return (this.SelectWorkspace(this.CurrentWks + 1) );}

		return (true);
	}

	function MoveCursorRight(){
		var iCurPos = ID3ASP_GetCursorPos(this.Parent) - 2;
		//On demande d'abord au Wks si le curseur peut se déplacer unitairement
		//Si oui, on déplace le curseur d'une seul position
		if (this.Workspaces[this.CurrentWks].Format == 'm'){
			//Si ce n'est pas le premier caractère
			if (this.Workspaces[this.CurrentWks].CurPos > 0){
				this.Workspaces[this.CurrentWks].CurPos--;
				ID3ASP_SelectRange(iCurPos,iCurPos + 1,this.Parent);
				if (!this.IsMasked(this.CurrentWks,this.Workspaces[this.CurrentWks].CurPos - 1) ){
					return(this.MoveCursorRight())}
			}
			else{
				this.CursorPos = 0;
				return (this.SelectWorkspace(this.CurrentWks - 1) );}
		}
		//Si non, on passe au prochain workspace si possible
		else{
			return (this.SelectWorkspace(this.CurrentWks - 1) );}

		return (true);
	}

	function ParseMask(){
		var bWksFound = new Boolean();
		var strWksMask = new String();
		var iStartSearch = 0,iWksStart = 0,iWksStop = 0;
		var oNewWks;

		bWksFound = true

		while (bWksFound == true){
			iWksStart = this.Mask.indexOf('[',iStartSearch) + 1

			if (iWksStart > 0){

				iWksStop = this.Mask.indexOf(']',iWksStart);
				this.AddWorkspace(iWksStart,iWksStop);
			}
			else{
				bWksFound = false;
			}
			iStartSearch = iWksStart + 1;
		}
	}

	function SelectWorkspace(iWks){
		var iCurPos = this.CursorPos;
		var iWksStart = 0,iWksStop = 1,iSelStart = 0,iSelStop = 0;
		var sBefore = ''; sAfter = '',sContent = '';


		if ( (iWks >= this.Workspaces.length) || (iWks < 0) ){
			return(false);}

		for (var i = 0;i<iWks;i++){
			iSelStart = this.Workspaces[iWks].StrBefore.length + this.Parent.value.indexOf(this.Workspaces[iWks].StrBefore + this.Workspaces[iWks].Content + this.Workspaces[iWks].StrAfter,iSelStart);

			if (this.Parent.value.indexOf(this.Workspaces[iWks].StrBefore + this.Workspaces[iWks].Content + this.Workspaces[iWks].StrAfter,iSelStart) < 0){
				break;}
		}

		iSelStop = iSelStart + this.Workspaces[iWks].Content.length;
		this.Workspaces[iWks].CurPos = iCurPos - iSelStart + 1;

		if (this.Workspaces[iWks].Format == 'm'){
			if (this.CursorIsIn(iCurPos,iWks) ){
				var i = this.Workspaces[iWks].CurPos - 1;
				if (this.Workspaces[iWks].RangeNum > i){
					while (this.IsMasked(iWks,i) == false){
						i++;}
				}
				else{
					i--;
				}
				this.Workspaces[iWks].CurPos = i + 1;
				iSelStart = iSelStart + i;
				iSelStop = iSelStart + 1;
			}
			else{
				iSelStop = iSelStart + 1;
				this.Workspaces[iWks].CurPos = 1;}
		}

		this.SetWorkspace(iWks);
		ID3ASP_SelectRange(iSelStart,iSelStop,this.Parent);

		return (true);
	}


	function SetWorkspace(iWks){
		this.CurrentWks = iWks
		this.Workspaces[iWks].NewContent = '';
	}

	//EVENT
	function KeyDown(){
		var bReturn = false;
		var oWks = document.selection.createRange();
		var iCurPos = ID3ASP_GetCursorPos(this.Parent);

		switch (event.keyCode){
			case 8: // Backspace
				this.Workspaces[this.CurrentWks].DeleteContent();
				if ( ! this.MoveCursorRight() ){
					this.SelectWorkspace(0);}					
				break;
			case 9:	// Tab
				if (event.shiftKey == false){
					if ( ! this.MoveCursorLeft() ){
						ID3ASP_ToNextField(this.Parent);}
				}
				else{
					if ( ! this.MoveCursorRight() ){
						ID3ASP_ToPreviousField(this.Parent);}
				}
				break;
			case 35: // End
				this.SelectWorkspace(this.Workspaces.length - 1)
				break;
			case 36: // Home
				this.SelectWorkspace(0)
				break;
			case 37: // Right <--
				this.MoveCursorRight();
				break;
			case 33:
			case 38: // Up
				this.Workspaces[this.CurrentWks].Increment();
				break;
			case 39: // Left -->
				this.MoveCursorLeft();
				break;
			case 34:
			case 40: // Down
				this.Workspaces[this.CurrentWks].Decrement();
				break;
			case 46: // Delete
				this.Workspaces[this.CurrentWks].DeleteContent();
				if (this.Workspaces[this.CurrentWks].Format == 'm'){
					ID3ASP_SelectRange(iCurPos - 1,iCurPos ,this.Parent);
					}
				else{
					this.SelectWorkspace(this.CurrentWks);}
				break;
			default:
				bReturn = true;
		}

		oWks = null;
		return(bReturn);
	}

	function KeyPress(){
		var oWks = document.selection.createRange();
		var sValue = String.fromCharCode(event.keyCode)

		if (sValue == this.Workspaces[this.CurrentWks].EscChar){
			if( !this.SelectWorkspace(this.CurrentWks + 1) )
				ID3ASP_ToNextField(this.Parent);
		}
		else{
			if(this.Workspaces[this.CurrentWks].Format == 'm'){
				this.Workspaces[this.CurrentWks].EditChar(sValue);
			}
			else{
				this.Workspaces[this.CurrentWks].EditGlobal(sValue);
			}
		}

		return(false)
	}
}



// #################################################################################
// ID3ASP_NumberBox
// #################################################################################
function ID3ASP_NumberBox(obj){
	if (isNaN(obj.value) != true){
		switch (event.keyCode){
			case 33:
				obj.value = Number(obj.value) + 10;
				break;
			case 38:
				obj.value = Number(obj.value) + 1;
				break;
			case 34:
				obj.value = Number(obj.value) - 10;
				break;
			case 40:
				obj.value = Number(obj.value) - 1;
				break;
			default:
				return(true);
				break;
		}
	}
	else{
		obj.value = 0;
	}
		
	return(false);
}

	

// #################################################################################
// ID3ASP_PopUpCalendar
// #################################################################################
function ID3ASP_PopUpCalendar(obj,strFieldName,strMonthList,strWeekdayList){
	var oNest = document.createElement('DIV');
	oNest.ID = 'Nest' + strFieldName;
	oNest.Name = 'Nest' + strFieldName;
	document.body.appendChild(oNest);

	if (String(obj.ID3bObjAttached) == 'undefined'){
		obj.ID3bObjAttached = true;
		obj.ID3CalendarObj = new ID3ASP_CalendarObj(obj,oNest,strFieldName,strMonthList,strWeekdayList,'ID3CalendarPopUp');}
	else{
		obj.ID3CalendarObj.Hide();
	}
	
	oNest = null;
}



// #################################################################################
// ID3ASP_RepeatStr
// #################################################################################
function ID3ASP_RepeatStr(str,iNbRepeat){
	var sNewStr = '';

	for (var i=0;i<iNbRepeat;i++){
		sNewStr += str;
	}

	return (sNewStr);
}
	
	

// #################################################################################
// ID3ASP_SeekWorkspace
// #################################################################################
function ID3ASP_SeekWorkspace(obj){

	var iCurPos = obj.ID3MaskObj.CursorPos;
	var iWks = 0;

	if (obj.ID3MaskObj.LastEvent == 'click'){
		iCurPos = ID3ASP_GetCursorPos(obj) - 1;
		obj.ID3MaskObj.CursorPos = iCurPos;}
	else{
		obj.ID3MaskObj.LastEvent = 'click';}

	for (var i = 0;i<obj.ID3MaskObj.Workspaces.length;i++){
		iWks = i;
		if (obj.ID3MaskObj.CursorIsIn(iCurPos,i) ){
			break;}			
	}

	obj.ID3MaskObj.SelectWorkspace(iWks);
}


	
// #################################################################################
// ID3ASP_SelectRange
// #################################################################################
function ID3ASP_SelectRange(iSelStart,iSelStop,obj)
{
	var oTR = obj.createTextRange();
		
	oTR.moveStart('character',iSelStart);
	oTR.moveEnd('character',iSelStop - obj.value.length);
		
	oTR.select();
}



// #################################################################################
// ID3ASP_SelectListObj
// #################################################################################
function ID3ASP_SelectListObj(oRef)
{
	this.Ref = oRef;
	this.SelectedIndex = (oRef.selectedIndex == 'undefined')?-1:oRef.selectedIndex;
	this.Count = oRef.length;
	
	if (this.SelectedIndex >= 0)
	{
		this.Value = oRef[this.SelectedIndex].value;
		this.Text = oRef[this.SelectedIndex].text;
	}
		
	//Déclaration des méthodes de l'objet
	if (typeof(_ID3ASP_SelectListObj_prototype_called) == 'undefined')
	{
		_ID3ASP_SelectListObj_prototype_called = true;

		ID3ASP_SelectListObj.prototype.AddItem = AddItem;
		ID3ASP_SelectListObj.prototype.DelItem = DelItem;
		ID3ASP_SelectListObj.prototype.DeselectAll = DeselectAll;
		ID3ASP_SelectListObj.prototype.DelSelected = DelSelected;
		ID3ASP_SelectListObj.prototype.SelectAll = SelectAll;
		ID3ASP_SelectListObj.prototype.SelectIndex = SelectIndex;
		ID3ASP_SelectListObj.prototype.GetIndex = GetIndex;
		ID3ASP_SelectListObj.prototype.Items = Items;
	}
	
	function AddItem(sKey,sText)
	{
		this.Ref.options[this.Count] = new Option(sKey,sText);
	}

	function DelItem(sText)
	{
		this.Ref.options[this.GetIndex(sText)] = null;
	}
	
	function DelSelected()
	{
		this.DelItem(this.Text);
	}
	
	function Items(index)
	{
		return(this.Ref.options[index])
	}
	
	function SelectAll()
	{
		var i;
		
		for (i=0;i<this.Count;i++)
		{
			this.Ref.options[i].selected = true;
		}
	}
	
	function DeselectAll()
	{
		var i;
		
		for (i=0;i<this.Count;i++)
		{
			this.Ref.options[i].selected = false;
		}
		
		this.Ref.selectedIndex = 0;
		this.Ref.selectedIndex = -1;
	}
	
	function SelectIndex(index)
	{
		this.DeselectAll();
				
		this.Ref.options[index].selected = true;
		this.SelectedIndex = this.Ref.selectedIndex;
		this.Value = this.Ref.options[index].value
		this.Text = this.Ref.options[index].text
	}
	
	function GetIndex(sKey)
	{
		var iIndex = 0;
		
		while ( (iIndex < this.Count) && (this.Ref.options[iIndex].text != sKey) )
		{
			iIndex++;
		}
				
		return(iIndex);
	}
}



// #################################################################################
// ID3ASP_ShowHideSelect
// #################################################################################
function ID3ASP_ShowHideSelect(sVisibility,top,left,width,height)
{
	var arSelect = document.getElementsByTagName("SELECT")
	var oRect = new ID3ASP_RectObj(top,left,width,height)
	
	for (var i=0;i<arSelect.length;i++){
		if (sVisibility == 'hidden'){
			if (ID3ASP_IsInRect(arSelect[i],oRect)){
				arSelect[i].style.visibility = 'hidden';}
		}
		else{
			arSelect[i].style.visibility = 'inherit';}
	}
}

function ID3ASP_IsInRect(obj,oRect){
	obj.style.position = 'relative';
	obj.style.top=0;
	obj.style.left = 0;

	var objZone = new ID3ASP_RectObj(obj.offsetTop,obj.offsetLeft,obj.offsetWidth,obj.offsetHeight)
	
	if (oRect.IsOver(objZone)){
		return(true);
	}
	
	if (objZone.IsOver(oRect)){
		return(true);
	}
	
	return(false);
}	

function ID3ASP_RectObj(top,left,width,height){
	this.Coord = new Array();
	this.top	= Number(String(top).replace('px',''));
	this.left	= Number(String(left).replace('px',''));
	this.width	= Number(String(width).replace('px',''));
	this.height	= Number(String(height).replace('px',''));
	
	
	//Déclaration des méthodes de l'objet
	if (typeof(_ID3ASP_RectObj_prototype_called) == 'undefined'){
		_ID3ASP_RectObj_prototype_called = true;
	
		ID3ASP_RectObj.prototype.IsIn = IsIn;
		ID3ASP_RectObj.prototype.IsOver = IsOver;
		ID3ASP_RectObj.prototype.IsTrought = IsTrought;
		
		//Event
		ID3ASP_RectObj.prototype.ClassInit = ClassInit;
	}
	
	function IsIn(coordPoint){
		var iX = coordPoint[1];
		var iY = coordPoint[0];
		
		if ((iY > this.Coord[0][0]) && (iX > this.Coord[0][1]) && (iY < this.Coord[3][0]) && (iX < this.Coord[3][1]) ){
			return (true);
		}
		
		return(false);
	}
	
	function IsOver(oRect){
		//Check if one of the point is in the rect
		for (var i=0;i<4;i++){
			if (this.IsIn(oRect.Coord[i])){
				return(true);
			}
		}
		
		//Check if one side pass trought the rect
		for (i=0;i<4;i++){
			if (this.IsTrought(oRect.Coord[i],oRect.Coord[(i+1)%4])){
				return(true);
			}
		}
		
		
		return(false)
	}
	
	function IsTrought(coordPointA,coordPointB){
		//Check orientation
		if (coordPointA[1] == coordPointB[1]){	//This is a vert. line
			if ((this.Coord[0][1] < coordPointA[1]) && (this.Coord[1][1] > coordPointA[1])) {
				if ( (this.Coord[0][0] >= coordPointA[0]) && (this.Coord[2][0] <= coordPointB[0]) )
					return(true);
			}
		}
		else{
			if ((this.Coord[0][0] < coordPointA[0]) && (this.Coord[2][0] > coordPointA[0])) {
				if ( (this.Coord[0][1] >= coordPointA[1]) && (this.Coord[1][1] <= coordPointB[1]) ){
					return(true);}
			}
		}
		
		return (false);
	}
	
	// EVENTS
	function ClassInit(){
		//Création de l'architecture de coord.
		for (var i = 0;i<4;i++){
			this.Coord[i] = new Array();
		}
		
		//Mise en place des valeurs des coord.
		// Top-Left
		this.Coord[0][0]	= this.top;					//y
		this.Coord[0][1]	= this.left;				//x
		// Top-Right
		this.Coord[1][0]	= this.top;
		this.Coord[1][1]	= this.left + this.width;
		// Bottom-Left
		this.Coord[2][0]	= this.top + this.height;
		this.Coord[2][1]	= this.left;
		// Bottom-Right
		this.Coord[3][0]	= this.top + this.height;
		this.Coord[3][1]	= this.left + this.width;
	}
	
	this.ClassInit();
}
	
// #################################################################################
// ID3ASP_ToggleColorOff
// #################################################################################
function ID3ASP_ToggleClassOff(obj){
	obj.className = obj.OldClass ;
}



// #################################################################################
// ID3ASP_ToggleColorOn
// #################################################################################
function ID3ASP_ToggleClassOn(obj,sClass){
	obj.OldClass = obj.className;
	obj.className = sClass;
}


// #################################################################################
// ID3ASP_MouseOver / ID3ASP_MouseOut
//##################################################################################
function ID3ASP_MouseOver()
{
	for (var i=0; i<ID3ASP_MouseOver.arguments.length; i+=2) {
		var obj = ID3ASP_MouseOver.arguments[i+1]
		obj.sOldImg = obj.src;
		obj.src = ID3ASP_MouseOver.arguments[i];
	}
}

function ID3ASP_MouseOut()
{
	for (var i=0; i<ID3ASP_MouseOut.arguments.length; i++) {
		
		var obj = ID3ASP_MouseOut.arguments[i]
		obj.src = obj.sOldImg;
	}
}


// #################################################################################
// ID3ASP_ToNextField
// #################################################################################
function ID3ASP_ToNextField(obj){
	var next=0, found=false
	var oForm= obj.form
		
	for(var i=0;i<oForm.length;i++){
		if(obj==oForm.item(i)){
			next=i+1;
			found=true
			break;}
	}
		
	while(found){  //Infinite loop 
		if( oForm.item(next).disabled==false &&  oForm.item(next).type!='hidden'){
			oForm.item(next).focus();
			break;}
		else{
			if(next<oForm.length-1)
				next=next+1;
			else
				break;	
		}
	}
}

// #################################################################################
// ID3ASP_ToPreviousField
// #################################################################################
function ID3ASP_ToPreviousField(obj){
	var iPrevious=0, found=false
	var oForm= obj.form
		
	for(var i=0;i<oForm.length;i++){
		if(obj==oForm.item(i)) {
			iPrevious=i-1;
			found=true
			break;
		}
	}
		
	while(found){  //Infinite loop 
		if( oForm.item(iPrevious).disabled==false &&  oForm.item(iPrevious).type!='hidden'){
			oForm.item(iPrevious).focus();
			break;}
		else{
			if(iPrevious > 0)
				iPrevious = iPrevious - 1;
			else
				break;
		}
	}
}


// #################################################################################
// ID3ASP_ValidateForm
// #################################################################################
function ID3ASP_ValidateForm(oForm, sErrorMessage) {
	var OK = true;
	var i, oField;
	
	for (i=0;i<oForm.elements.length;i++) {
		if (OK && oForm.elements[i].name == "_ID3ASP_REQ") {
			eval("oField = oForm." + oForm.elements[i].value);
			OK = OK && ID3ASP_CheckIfEmpty(oField,sErrorMessage)
		}
	}
	
	return(OK);
}



// #################################################################################
// ID3ASP_WorkspaceObj
// #################################################################################
function ID3ASP_WorkspaceObj(obj)
{
	//Workspace properties
	this.Parent		= obj;
	this.Content	= '';
	this.NewContent	= '';
	this.Mask		= '';
	this.Range		= '-';
	this.RangeNum	= 1;
	this.Format		= '';
	this.RegExp		= '';
	this.PosStart	= 0;
	this.PosStop	= 0;
	this.EscChar	= new String();
	this.StrBefore	= '';
	this.StrAfter	= '';
	this.CurPos		= 0;

	//Déclaration des méthodes de l'objet
	if (typeof(_ID3ASP_WorkspaceObj_prototype_called) == 'undefined'){
		_ID3ASP_WorkspaceObj_prototype_called = true;

		ID3ASP_WorkspaceObj.prototype.Decrement = Decrement;
		ID3ASP_WorkspaceObj.prototype.DeleteContent = DeleteContent;
		ID3ASP_WorkspaceObj.prototype.EditChar = EditChar;
		ID3ASP_WorkspaceObj.prototype.EditGlobal = EditGlobal;
		ID3ASP_WorkspaceObj.prototype.Increment = Increment;
		ID3ASP_WorkspaceObj.prototype.Init = Init;
		ID3ASP_WorkspaceObj.prototype.isNumeric = isNumeric;
		ID3ASP_WorkspaceObj.prototype.PostFormatContent = PostFormatContent;
		ID3ASP_WorkspaceObj.prototype.PreFormatValue = PreFormatValue;
	}

	function Decrement(){
		var oWks = document.selection.createRange();
		var iCurPos = ID3ASP_GetCursorPos(this.Parent.Parent);
		var iIncFactor = 1;

		if (event.keyCode == 34){
			iIncFactor = 10
		}

		if(this.Format == 'm'){
			if (this.isNumeric(this.CurPos) ){
				if (isNaN(oWks.text)){
					oWks.text = '9';}
				else{
					if((Number(oWks.text) - iIncFactor)>=0){
						oWks.text = (Number(oWks.text) - iIncFactor).toString();}
				}
			}
			else{
				var iCharCode = oWks.text.charCodeAt(0) - iIncFactor;

				if ((iCharCode > 90) && (iCharCode < 97)){
					iCharCode = 90;}

				if (String.fromCharCode(iCharCode) >= 'A'){
					oWks.text = this.PreFormatValue(String.fromCharCode(iCharCode)) }
			}
			ID3ASP_SelectRange(iCurPos - 1,iCurPos,this.Parent.Parent)
		}
		else{
			if (! this.isNumeric(this.CurPos)){
				var iCharCode = oWks.text.charCodeAt(oWks.text.length - 1) - iIncFactor;

				if ((iCharCode > 90) && (iCharCode < 97)){
					iCharCode = 97;}

				if (String.fromCharCode(iCharCode) >= 'A'){
					this.Content = this.PreFormatValue(String.fromCharCode(iCharCode)) }
			}
			else{
				if (isNaN(oWks.text)){
					this.Content = '9'}
				else{
					if ( (Number(oWks.text) - iIncFactor) >= 0)
					this.Content = (Number(oWks.text) - iIncFactor).toString();}
			}

			oWks.text = this.Content		
			this.Parent.SelectWorkspace(this.Parent.CurrentWks);
		}
	}

	function DeleteContent(){
		var oWks = document.selection.createRange();

		this.NewContent = '';

		if (this.Format == 'm'){
			oWks.text = '_';
		}
		else{
			switch (this.Range){
				case '-':
					if (this.NewContent.length == 0)
						this.NewContent = '_';
					break;
				case '+':
				case '=':
					while (this.NewContent.length < this.RangeNum){
						this.NewContent += '_';
					}
					break;
			}

			this.Content = this.NewContent;
			oWks.text = this.Content
		}
	}

	function EditChar(sValue){
		var regMask;
		var oWks = document.selection.createRange();

		switch (this.RegExp.charAt(this.CurPos - 1)){
			case 'a':
				regMask = new RegExp('[a-z]|[0-9]');
				break;
			case 'A':
				regMask = new RegExp('[a-z]|[0-9]');
				if (event.shiftKey){
					sValue= sValue.toUpperCase();}
				break;
			case 'l':
				regMask = new RegExp('[a-z]');
				sValue= sValue.toLowerCase();
				break;
			case 'L':
				regMask = new RegExp('[a-z]|[A-Z]');
				break;
			case 'U':
				regMask = new RegExp('[A-Z]');
				sValue= sValue.toUpperCase();
				break;
			case '0':
				regMask = new RegExp('[0-9]');
				break;
		}

		if (sValue.search(regMask) == 0 ){
			oWks.text = sValue;
			if (!this.Parent.MoveCursorLeft()){
				ID3ASP_ToNextField(this.Parent.Parent);}
		}

		return (false);
	}

	function EditGlobal(sValue){
		var regWksExp = new RegExp(this.RegExp);
		var regTemp = new RegExp('[_]');
		var bMoveCursor = true;
		var strTempContent = this.Content;
		var oWksSel = document.selection.createRange();

		sValue = this.PreFormatValue(sValue); // Préformattage de la donnée

		if (sValue.search(regWksExp) < 0){
			return (false);
		}

		switch (this.Range){
			case '-':
				if (this.NewContent.length <= this.RangeNum){
					this.NewContent += sValue;
					if (this.NewContent.length >= this.RangeNum){
						this.PostFormatContent(oWksSel);

						if (!this.Parent.MoveCursorLeft()){
							ID3ASP_ToNextField(this.Parent.Parent);}
						return(false);}
				}
				else{
					return(false);}
				break;
			case '+':
				if (this.NewContent.indexOf('_') < 0){
					this.NewContent += sValue;}
				else{	
					this.NewContent = this.Content.replace(regTemp,sValue);}
				break;
			case '=':
				if (this.NewContent.indexOf('_') < 0){
					this.NewContent = sValue;}
				else{	
					this.NewContent = this.Content.replace(regTemp,sValue);

					if (this.NewContent.indexOf('_') < 0){
						this.PostFormatContent(oWksSel);
						if (!this.Parent.MoveCursorLeft()){
							ID3ASP_ToNextField(this.Parent.Parent);}
						return(false);}							
				}	
				break;
		}

		this.PostFormatContent(oWksSel);
		return (true);
	}

	function Increment(){
		var oWks = document.selection.createRange();
		var iCurPos = ID3ASP_GetCursorPos(this.Parent.Parent);
		var iIncFactor = 1;

		if (event.keyCode == 33){
			iIncFactor = 10
		}

		if(this.Format == 'm'){
			if (this.isNumeric(this.CurPos) ){
				if (isNaN(oWks.text)){
					oWks.text = String('0');}
				else{
					if((Number(oWks.text) + iIncFactor)<10){
						oWks.text = (Number(oWks.text) + iIncFactor).toString();}
				}
			}
			else{
				var iCharCode = oWks.text.charCodeAt(0) + iIncFactor;

				if ((iCharCode > 90) && (iCharCode < 97)){
					iCharCode = 97;}

				if (String.fromCharCode(iCharCode) <= 'z'){
					oWks.text =  this.PreFormatValue(String.fromCharCode(iCharCode)) }
			}
			ID3ASP_SelectRange(iCurPos - 1,iCurPos,this.Parent.Parent)
		}
		else{
			if (this.isNumeric(this.CurPos)){
				if (isNaN(oWks.text)){
					this.Content = String(0);}
				else{
					switch (this.Range){
						case '+':
							this.Content = (Number(oWks.text) + iIncFactor).toString();
							break;
						case '=':
						case '-':
							if ((Number(oWks.text) + iIncFactor).toString().length <= this.RangeNum){
								this.Content = (Number(oWks.text) + iIncFactor).toString()}
							break;
					}
				}							
			}		

			oWks.text = this.Content				
			this.Parent.SelectWorkspace(this.Parent.CurrentWks);
		}

	}

	function Init(){
		this.Range = this.Mask.charAt(0);

		if ( isNaN(this.Mask.charAt(this.Mask.indexOf(':') - 1)) ){
			this.RangeNum = this.Mask.substring(1,this.Mask.indexOf(':') - 1);
		}
		else{
			this.RangeNum = this.Mask.substring(1,this.Mask.indexOf(':'));
		}

		this.Format = this.Mask.charAt(this.Mask.indexOf(':') - 1);
		if (this.Format == 'm'){
			this.RegExp = this.Mask.substring(this.Mask.indexOf(':') + 1);
		}
		else{
			this.RegExp = this.Mask.substring(this.Mask.indexOf(':') + 1).replace(RegExp('[(]','g'),'[').replace(RegExp('[)]','g'),']');
		}
	}

	function isNumeric(iCurPos){

		if (this.Format == 'm'){
			if (isNaN(this.RegExp.charAt(iCurPos - 1))){
				return(false);}
		}
		else{
			var str = new String('0');
			var oRegExp = new RegExp(this.RegExp);
			if (str.search(oRegExp) < 0)
				return(false);
		}

		return (true);
	}

	function PostFormatContent (oWksSel){
		switch (this.Range){
			case '-':
				if (this.NewContent.length == 0)
					this.NewContent = '_';
				break;
			case '+':
			case '=':
				while (this.NewContent.length < this.RangeNum){
					this.NewContent += '_';
				}
				break;
		}

		this.Content = this.NewContent;
		oWksSel.text = this.Content;
		oWksSel.moveStart('character',-1 * (this.Content.length) )
		oWksSel.select();
	}

	function PreFormatValue (sValue){
		var strValue = new String();

		switch (this.Format){
			case ('U'):
				strValue = sValue.toUpperCase();
				break;
			case ('L'):
				strValue = sValue.toLowerCase();
				break;
			case ('m'):
				switch (this.RegExp.charAt(this.CurPos - 1) ){
					case ('A'):
					case ('U'):
						strValue = sValue.toUpperCase();
						break;
					case ('l'):
						strValue = sValue.toUpperCase();
						break;
					default:
						strValue = sValue;
						break;
				}
				break;
			default:
				strValue = sValue
				break;
		}

		return strValue
	}
}
