var rewritePostBack = true;
var trackUnload = true;
var currentFocus = null;
function formEnhance(boxform_id, onoff, abortUnload) {
	if (rewritePostBack) {						// Rewrite Post Back Function for bug ASP.NET 1.1
		__doPostBack = __newPostBack;	
	}
	if (document.getElementById && document.getElementsByTagName) {
		var boxform = document.getElementById(boxform_id);
		if (!boxform) {
			var boxform = getDivByClass("boxForm");
			if (!boxform) {
				var boxform = document;
			}
		}
		var fieldsets = boxform.getElementsByTagName('fieldset');
		var fieldset = fieldsets[0];
		var inputs = fieldset.getElementsByTagName('input');

		for (i = 0; i < inputs.length; i++) {
			var px = inputs[i].className.match("px_[0-9]{1,3}");
			if (px != null) {	
				inputs[i].style.width = String(px).substr(3,3) + "px";
			} else if (inputs[i].className.indexOf("date") == -1 && inputs[i].className.indexOf("hour") == -1) {
				var maxLength = inputs[i].getAttribute("maxlength");
				if (maxLength != "") {
					maxLength = parseInt(maxLength);
					if (maxLength <= 5) {
						addCSSClass(inputs[i], 'min16');
					} else if (maxLength <= 15) {
						addCSSClass(inputs[i], 'min8');
					} else if (maxLength <= 25) {
						addCSSClass(inputs[i], 'min4');
					}  
				}
			}
			var current_onoff = onoff;
			if (inputs[i].getAttribute("disabled") == true) {
				current_onoff = false;
			}
			if (current_onoff == true) {
				// JS pour émuler :hover
				if (inputs[i].getAttribute("type") == "submit") {
					inputs[i].onfocus = function() {
						trackUnload = false;
						addCSSClass(this, 'hasFocus');
					}
					inputs[i].onblur = function() {
						trackUnload = true;
						removeClassName(this, 'hasFocus');
					}
				} else {
					var ajaxInput  = inputs[i].getAttribute("Lookup");			// For Ajax Textbox
					if (ajaxInput) {
						var ajaxEnabled = true;
						try {
							var disabled = inputs[i].getAttribute("disabled");
							ajaxEnabled = !disabled;
						} catch (ex) { ajaxEnabled = true}

						if (ajaxEnabled) {
							collector[inputs[i].id] = null;
							inputs[i].setAttribute("autocomplete", "off");			// Set Auto Complete to Off

							inputs[i].onfocus = function(e) {										
	 							addCSSClass(this, 'hasFocus');
							}
							inputs[i].onblur = function(e) {										// Set default value
								removeClassName(this, 'hasFocus');
								AjaxBlur(e);
							}
							inputs[i].onkeyup = function(e) {										// Launch Ajax Server call
	 							AjaxEvent(e);																			// Search Data
							}
							inputs[i].onkeydown = function(e) {									// Launch Ajax Server call
	 							AjaxBegin(e);																			// For Navigation Only
							}
						}
					} else {
						inputs[i].onfocus = function() {
							addCSSClass(this, 'hasFocus');
							currentFocus = this;
						}
						if (inputs[i].className.indexOf("date") == -1 && inputs[i].className.indexOf("hour") == -1) {
							inputs[i].onblur = function() {
								if (currentFocus == this) {
									currentFocus = null;
								}
								removeClassName(this, 'hasFocus');
							}
						} else if (inputs[i].className.indexOf("hour") == -1) {
							inputs[i].onblur = function() {
								if (currentFocus == this) {
									currentFocus = null;
								}
								removeClassName(this, 'hasFocus');
								enhanceDate(this);
							}
						} else {
							inputs[i].onblur = function() {
								if (currentFocus == this) {
									currentFocus = null;
								}
								removeClassName(this, 'hasFocus');
								enhanceHour(this);
							}
						}
					}
				}
			} else {
				// mode consultation
				// - gère le style disabled
				addCSSClass(inputs[i], 'isDisabled');
				// - empêche le contrôle de recevoir le focus
				if (inputs[i].getAttribute("type") != "text") {
					inputs[i].setAttribute("disabled", true);
				} else {
					addCSSClass(inputs[i], 'text');
					inputs[i].onfocus = function() { this.blur(); window.focus(); return false; }
				}
			}
		}
		var textareas = fieldset.getElementsByTagName('textarea');
		for (i = 0; i < textareas.length; i++) {
			var current_onoff = onoff;
			if (textareas[i].getAttribute("disabled") == true) {
				current_onoff = false;
			}
			if (current_onoff == true) {
				// JS pour émuler :hover
				textareas[i].onfocus = function() {
					addCSSClass(this, 'hasFocus');
					currentFocus = this;
				}
				textareas[i].onblur = function() {
					if (currentFocus == this) {
						currentFocus = null;
					}
					removeClassName(this, 'hasFocus');
				}
			} else {
				// mode consultation
				// - gère le style disabled
				addCSSClass(textareas[i], 'isDisabled');
				// - empêche le contrôle de recevoir le focus
				textareas[i].onfocus = function() { this.blur(); window.focus(); return false; }
			}
		}
		var selects = fieldset.getElementsByTagName('select');
		for (i = 0; i < selects.length; i++) {
			var current_onoff = onoff;
			var px = selects[i].className.match("px_[0-9]{1,3}");
			if (px != null) {	
				selects[i].style.width = String(px).substr(3,3) + "px";
			}			
			if (selects[i].getAttribute("disabled") == true) {
				current_onoff = false;
			}
			if (current_onoff == true) {
				// JS pour émuler :hover
				selects[i].onfocus = function() {
					addCSSClass(this, 'hasFocus');
					currentFocus = this;
				}
				selects[i].onblur = function() {
					if (currentFocus == this) {
						currentFocus = null;
					}
					removeClassName(this, 'hasFocus');
				}
			} else {
				// - gère le style disabled
				addCSSClass(selects[i], 'isDisabled');
				// - empêche le contrôle de recevoir le focus
				selects[i].onfocus = function() { this.blur(); window.focus(); return false; }
				// - empêche l'utilisateur de changer la valeur en cours
				selects[i].setAttribute("backupIndex", selects[i].selectedIndex);
				selects[i].onchange = function() { this.selectedIndex = parseInt(this.getAttribute("backupIndex")); return false; }
			}
		}
		if (onoff == true) {
			var firstInput;
			for (i = 0; i < inputs.length; i++) {
				if (inputs[i].disabled == false && inputs[i].type != "hidden") {
					firstInput = inputs[i];
					break;
				}
			}
			var firstSelect;
			for (i = 0; i < selects.length; i++) {
				if (selects[i].disabled == false) {
					firstSelect = selects[i];
					break;
				}
			}
			
			if (firstInput == null) {
				if (firstSelect != null) {
					firstSelect.focus();
				}
			} else if (firstSelect == null) {
				firstInput.focus();
			} else  {
				if (firstInput.offsetTop <= firstSelect.offsetTop) {
					firstInput.focus();
				} else {
					firstSelect.focus();
				}
			}
			fieldset = fieldsets[fieldsets.length - 1];
			fieldset.onclick = function(evt) {
				trackUnload = false;
				if (currentFocus != null) {
					currentFocus.onblur();
				}
			}
			fieldset.onfocus = function(evt) {
				trackUnload = false;
				if (currentFocus != null) {
					currentFocus.onblur();
				}
			}
			fieldset.onblur = function() { trackUnload = true; }
			window.onbeforeunload = function (evt) {
				if (trackUnload == true && abortUnload == true) {
					window.focus();
					var message = 'Si vous confirmez la sortie de ce formulaire, vous perdrez les informations que vous avez saisies.';
					if (typeof evt == 'undefined') {
						evt = window.event;
					}
					if (evt) {
						evt.returnValue = message;
					}
					return message;
				}
			}
		}
	}
}


function removeClassName (elem, className) {
	elem.className = elem.className.replace(className, "").trim();
}

function addCSSClass (elem, className) {
	elem.className = elem.className.replace(className, "").trim();
	elem.className = (elem.className + " " + className).trim();
}

String.prototype.trim = function() {
	return this.replace( /^\s+|\s+$/, "" );
}

function getDivByClass (className) {
	var my_array = document.getElementsByTagName("div");
	var retValue = null;
	var i;
	for (i = 0; i < my_array.length; i++) {
		var c = " " + my_array[i].className + " ";
		if (c.indexOf(" " + className + " ") != -1) {
			retValue = my_array[i];
			break;
		}
	}
	return retValue;
}

function enhanceDate(input) {
	try {
		var tmp = input.value;
		var len = tmp.length;
		var dat = "";
		var sep = 0;
		var abc = 0;

		if (verboseDate(input) == -1) {
			for (var i = 0; i < tmp.length; i++) {
				var c = tmp.substr(i, 1);
				if (c == "/") {
					sep++;
					dat += "/";
				} else if (c == "-") {
					sep++;
					dat += "/";
				} else if (c == ".") {
					sep++;
					dat += "/";
				} else if (c == " ") {
					sep++;
					dat += "/";
				} else if (c < "0") {
					abc++;
				} else if (c > "9") {
					abc++;
				} else {
					dat += c;
				}
			}
			if (abc == 0) {
				len = dat.length;
				var year = new Date().getFullYear();
				if ((len == 4) && (sep == 0)) {
					// Suppose DDMM
					dat = dat.substr(0, 2) + "/" + dat.substr(2, 2) + "/" + year.toString();
				} else if ((len == 5) && (sep == 1)) {
					// Suppose DD/MM
					dat = dat.substr(0, 5) + "/" + year.toString();
				} else if ((len == 6) && (sep == 0)) {
					// Suppose DDMMYY
					if (dat.substr(4, 2) >= "20") {
						year = year - 100;
					}
					dat = dat.substr(0, 2) + "/" + dat.substr(2, 2) + "/" + year.toString().substr(0, 2) + dat.substr(4, 2);
				} else if ((len == 8) && (sep == 2)) {
					// Suppose DD/MM/YY
					if (dat.substr(6, 2) >= "20") {
						year = year - 100;
					}
					dat = dat.substr(0, 6) + year.toString().substr(0, 2) + dat.substr(6, 2);
				} else if ((len == 8) && (sep == 0)) {
					// Suppose DDMMCCYY
					dat = dat.substr(0, 2) + "/" + dat.substr(2, 2) + "/" + dat.substr(4, 4);
				}
				input.value = dat;
			}
		}
	}
	catch (e) {}
}

function enhanceHour(input) {
	var re = new RegExp("(^[0-9]{1,2}$)|(^[0-9]{4}$)|(^[0-9]{1,2}(h|H)$)|(^[0-9]{1}(h|H|:| |-)[0-9]{2}$)|(^[0-9]{1,2}(h|H|:| |-)[0-9]{2}$)");
	var rs = re.exec(input.value);		
	if (rs != null) {
		if(rs[1] != "") {
			if(rs[1].length == 1) {
				input.value = "0" + rs[1].substr(0,1) + ":00";
			} else {
			input.value = rs[1].substr(0,2) + ":00";
		}
		} else if (rs[2] != "") {
			input.value = rs[2].substr(0,2) + ":" + rs[2].substr(2,2);
		} else if (rs[3] != "") {	
			if (rs[3].length == 2) {
				input.value = "0" + rs[3].substr(0,1) + ":00";
			} else {
			input.value = rs[3].substr(0,2) + ":00";
			}
		} else if (rs[4] != "") {
		}else if (rs[5] != "") {
			input.value = "0" + rs[5].substr(0,1) + ":" + rs[5].substr(2,2);
		} else if (rs[6] != "") {
			input.value = rs[5].substr(0,2) + ":" + rs[5].substr(3,2);
		} else if (rs[7] != "") {
			input.value = rs[7].substr(0,2) + ":" + rs[7].substr(3,2);
		}
		
	}
}

function verboseDate(input) {
	var tmp = input.value.toLowerCase();
	var ret = 0;

	if (tmp.indexOf("dem") != -1) {
		input.value = formatDate(addDay(new Date(),1));
	} else if (tmp.indexOf("hier") != -1) {
		input.value = formatDate(addDay(new Date(),-1));
	} else if (tmp.indexOf("auj") != -1) {
		input.value = formatDate(new Date());
	} else {
		var re = new RegExp("(dim|lun|mar|mer|jeu|ven|sam)([a-z]{0,})($|\\+{1,3}|-{1,3})");
		var rs = re.exec(tmp);

		if (rs != null) {
			var dt = new Date();
			var day = -1;

			switch(rs[1].substr(0,3)) {
				case "lun": day = 1; break;
				case "mar": day = 2; break;	
				case "mer": day = 3; break;	
				case "jeu": day = 4; break;	
				case "ven": day = 5; break;	
				case "sam": day = 6; break;	
				case "dim": day = 7; break;
			}
			if(rs[3].indexOf("+") != -1) {
				day = day + 7 * rs[3].length;
			} else if (rs[3].indexOf("-") != -1) {
				day = day - 7 * rs[3].length;
			}
			input.value = formatDate(addDay(dt, day - dt.getDay()));
		} else {
			ret = -1;
		}
	}
	return ret;
}

function formatDate(obj) {
  var dt = leftPad(obj.getDate().toString(), 2, "0");
	dt += "/" + leftPad((obj.getMonth()+1).toString(), 2, "0");
  dt += "/" + obj.getFullYear().toString();
	return dt;
}

function addDay(objDate, jour) {
	objDate.setTime(objDate.getTime() + (jour * 86400000));
	return objDate;
}

function leftPad(str, len, car) {
	while(str.length < len) {
		str = car + str;
	}
	return str;
}

function __newPostBack(eventTarget, eventArgument) {
	var theform; 
	if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
		theform = document.dotnetForm;
		if (theform == null) {
			theform = document.forms["dotnetForm"];
		}
	}
	else {
		theform = document.forms["dotnetForm"];
	}
	theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
	theform.__EVENTARGUMENT.value = eventArgument;
	theform.submit();
}
