var xHttpAlertRequest;
var rIsoDateRegexp = new RegExp(/^([0-9]{4})-0?([0-9]{1,2})-0?([0-9]{1,2})(?: 0?([0-9]{1,2}):0?([0-9]{1,2}):0?([0-9]{1,2}))?$/)
var bAlertOn = false;
var aHiddenSelects=new Array()
function hideSelects() {
	aHiddenSelects=new Array()
	var aSelects = document.getElementsByTagName("select")
	for(var i=0 ; i < aSelects.length ; i++) {
		if (aSelects[i].style.visibility != "hidden") {
			aHiddenSelects.push(aSelects[i])
			aSelects[i].style.visibility = "hidden"
		}
	}
}
function makeDicRequest(sUrl, fCallback, sMethod, sPostParams) {
	if (sMethod == null) {
    sMethod = "POST"
  }
  makeRequest(sUrl, function(xResponse) {
		d = Dictionnary.readFromXML(xResponse)
		xResponse=null;
		fCallback(d)
	}, sMethod,sPostParams)
}
function showSelects() {
	while (aHiddenSelects.length > 0) {
		aHiddenSelects.pop().visibility="visible"
	}
}
function makeRequest(sUrl, fCallback, sMethod, sPostParams) {
  var xHttpRequest = false;
  if (sMethod == null) {
  	sMethod = "GET"
  }
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    xHttpRequest = new XMLHttpRequest();
    if (xHttpRequest.overrideMimeType) {
      xHttpRequest.overrideMimeType('text/xml');
    }
  } else if (window.ActiveXObject) { // IE
    try {
      xHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    	} catch (e) {}
     }
  }
  if (!xHttpRequest) {
    alert('Cannot create XMLHTTP instance');
    return false;
  }
  xHttpRequest.onreadystatechange = function() {
	  if (xHttpRequest.readyState == 4) {
	    if (xHttpRequest.status == 200) {
		  	fCallback(xHttpRequest.responseXML);
			}
		}
 	}
  xHttpRequest.open(sMethod, sUrl, true);
  if (sMethod=='POST') {
    xHttpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xHttpRequest.setRequestHeader("Content-length", sPostParams.length);
    xHttpRequest.setRequestHeader("Connection", "close");
  }
  xHttpRequest.send(sPostParams);
}

function makeAlertRequest(sUrl, fCallback) {
  xHttpAlertRequest = false;
  bRequestActive = true;
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    xHttpAlertRequest = new XMLHttpRequest();
    if (xHttpAlertRequest.overrideMimeType) {
      xHttpAlertRequest.overrideMimeType('text/xml');
    }
  } else if (window.ActiveXObject) { // IE
    try {
      xHttpAlertRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xHttpAlertRequest = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
     }
  }
  if (!xHttpAlertRequest) {
    alert('Cannot create XMLHTTP instance');
    return false;
  }
  xHttpAlertRequest.onreadystatechange = fCallback;
  xHttpAlertRequest.open('GET', sUrl, true);
  xHttpAlertRequest.send(null);
}

function getElementsUrl(aElements) {
	var eFrmElement
	var sRet = ""
	for(var i=0; i < aElements.length; i++) {
		eFrmElement = aElements[i]
		switch(eFrmElement.type) {
			case "elements-Array" :
				sRet = sRet + getElementsUrl(eFrmElement)
				break
			case "checkbox" :
			case "option" :
				if (eFrmElement.checked) {
					sRet = sRet + "&" + escape(eFrmElement.name) + "=" + escape(eFrmElement.value)
				}
				break
			default :
				sRet =  sRet + "&" + escape(eFrmElement.name) + "=" + escape(eFrmElement.value)
		}
	}
	return sRet
}
function postAJAXForm(fForm, sUrl, fCallback, bForce) {
	if(sUrl.indexOf("?")==-1) {
		sUrl = sUrl + "?"
	}
	sUrl = sUrl + getElementsUrl(fForm.elements)
	window.setTimeout('makeRequest("' + sUrl + '", ' + fCallback + ', ' + bForce +');',50)
}
function getLocaleDate(dDate, bGetDay) {
  if (bGetDay == null) {
    bGetDay = false
  }
	return (bGetDay ? T_WEEKDAYS[dDate.getDay()] + " " : "") + 
	       dDate.getDate() + " " + T_MONTHS[dDate.getMonth()] + " " + dDate.getFullYear()
}
function getLocaleDateTime(dDate) {
	return getLocaleDate(dDate) + " " + getLocaleTime(dDate)
}
function getLocaleTime(dDate) {
	return zeroPad(dDate.getHours()) + ":" + zeroPad(dDate.getMinutes())
}
function zeroPad(iInteger) {
  iInteger = "" + iInteger
  while (iInteger.length != 2) {
    iInteger = "0" + iInteger
  }
  return iInteger
}
function getIsoDateFromDate(dDate) {
  return dDate.getFullYear() + "-" + zeroPad(dDate.getMonth()+1) + "-" + zeroPad(dDate.getDate()) + " " +
         zeroPad(dDate.getHours()) + ":" + zeroPad(dDate.getMinutes()) + ":" + zeroPad(dDate.getSeconds()) 
}
function getDateFromIsoDate(sDate) {
  var r
  if (rIsoDateRegexp.test(sDate)) {
	  var aParts = rIsoDateRegexp.exec(sDate) 
	  r = new Date(aParts[1],aParts[2]-1,aParts[3],aParts[4],aParts[5],aParts[6])
  } else {
  	r = new Date()
  	r.setHours(0)
  	r.setMinutes(0)
  	r.setSeconds(0)
  	r.setMilliseconds(0)
  }
  return r
}

function getHtmlFromXml(xNode) {
	var xCNode
	var ret = ""
	for(var i=0; i < xNode.childNodes.length ; i++)  {
		xCNode =xNode.childNodes[i]
		switch(xCNode.nodeType) {
			case 1 :
			case 9 :
				ret += getHtmlFromXml(xCNode)
				break;
			case 3 :
			case 4 :
				ret += xCNode.nodeValue
		}
	}
	return ret
}
function inlinePopup(sTitle, sContents, bHasForm, iMaxWidth, iMaxHeight, iLeftMargin, iTopMargin) {
	if (bHasForm==null) {
		bHasForm=true
	}
	if  (iMaxWidth==null) {
		iMaxWidth=C_ALERTS_MAX_WIDTH;
	}
	if  (iMaxHeight==null) {
		iMaxHeight=C_ALERTS_MAX_HEIGHT;
	}
	if  (iLeftMargin==null) {
		iLeftMargin=C_ALERTS_LEFT_MARGIN;
	}
	if  (iTopMargin==null) {
		iTopMargin=C_ALERTS_TOP_MARGIN;
	}
	
	var iHeight = document.all ? document.documentElement.clientHeight : window.innerHeight
	if (iHeight < (2*iTopMargin + 200)) {
		iHeight = 2*iTopMargin + 200
	}
	var iWidth = document.all ? document.documentElement.clientWidth : window.innerWidth
	if (iWidth < (2*iLeftMargin + 200)) {
		iWidth = 2*iLeftMargin + 200
	}
	var iTop = 0
	
	var iSubmitHeight = bHasForm ? 200 : 50
	var dBack = document.createElement("div")

	dBack.id = "sy_back"
	if (document.all) {
		dBack.style.height = "2000px"
	}

	if (document.all) {
		document.getElementsByTagName("html")[0].style.overflow = "hidden"
	} else {
		document.body.style.overflow = "hidden"
	}
	var dAlertBox = document.createElement("div")
	var iAlertHeight = Math.min(iHeight-(2*iTopMargin),iMaxHeight)
	with (dAlertBox) {
		id = "sy_alertbox"
		style.height = iAlertHeight + "px"
		style.top = Math.round(iTop+ (iHeight-iAlertHeight)/2) + "px"
	}
	document.body.insertBefore(dBack, document.body.firstChild)
	document.body.insertBefore(dAlertBox, document.body.firstChild)
	
		
	var tAlertBox = document.createElement("table")
	with (tAlertBox) {
		style.height = Math.min(iHeight-(2*iTopMargin),iMaxHeight) + "px"
		style.width = Math.min(iWidth-(2*iLeftMargin),iMaxWidth) + "px"
		align = "center"
	}
	dAlertBox.appendChild(tAlertBox)
	var trAlertBox = tAlertBox.insertRow(0)
	var tdAlertBox = trAlertBox.insertCell(0)
	tdAlertBox.vAlign = "top"
	
	var dAlert = document.createElement("div")
	dAlert.id="sy_alert"
	tdAlertBox.appendChild(dAlert)
	
	
	if (sTitle != null) {
		var dAlertHeader = document.createElement("div")
		dAlertHeader.id = "sy_alert_header"
		dAlert.appendChild(dAlertHeader)
		
		var dCloseLink = document.createElement("div")
		dCloseLink.id="sy_alert_close"
		dAlertHeader.appendChild(dCloseLink)
		
		var aCloseLink = document.createElement("a")
		with (aCloseLink) {
			appendChild(document.createTextNode("X"))
			href = "javascript:void(" + (bHasForm ? "alertFormSubmitted()" : "hideAlert()" )+ ")"
		}
		dCloseLink.appendChild(aCloseLink)	
		var pTitle = document.createElement("p")
		with (pTitle) {
			id = "sy_alert_title"
			style.marginTop="0px"
			innerHTML = sTitle
		}
		dAlertHeader.appendChild(pTitle)
	}
	var wAlertContainer
	if(bHasForm) {
		var fAlert = document.createElement("form")
		with (fAlert) {
			id="frm_sy_alert"
			name="frm_sy_alert"
			onsubmit=alertFormSubmitted
		}	
		dAlert.appendChild(fAlert)
		wAlertContainer = fAlert
	} else {
		wAlertContainer = dAlert
	}
	
	var dAlertContents = document.createElement("div")
	with (dAlertContents) {
		id = "sy_alert_contents"
		innerHTML = sContents
		style.height = Math.min(iHeight-(2*iTopMargin)-iSubmitHeight,iMaxHeight-iSubmitHeight) +   "px"
	}
	wAlertContainer.appendChild(dAlertContents)
	
	if (bHasForm) {
		dAlertSubmit = document.createElement("div")
		dAlertSubmit.id="sy_alert_submit"
		wAlertContainer.appendChild(dAlertSubmit)
		
		sAlertSubmit = document.createElement("input")
		with (sAlertSubmit) {
			type="submit"
			value=T_SUBMIT
		}
		dAlertSubmit.appendChild(sAlertSubmit) 
	}
	
	window.scrollTo(0,0)
	if (document.all) {
		hideSelects()
	}
	bAlertOn = true
}
function hideAlert() {
	document.body.removeChild(document.getElementById("sy_back"))
	document.body.removeChild(document.getElementById("sy_alertbox"))
	if (document.all) {
		document.getElementsByTagName("html")[0].style.overflow = "auto"
		showSelects()
	} else {
		document.body.style.overflow = "auto"
	}
	bAlertOn = false
}

function getAJAXAlerts() {
	window.setTimeout("getAJAXAlerts();",C_ALERTS_JS_REFRESH)
	if (!bAlertOn) {
		makeAlertRequest("/index.php/alerts", printAJAXAlerts,false);
	}
}
function printAJAXAlerts() {
  if (xHttpAlertRequest.readyState == 4) {
    if (xHttpAlertRequest.status == 200) {
    	var xResponse = xHttpAlertRequest.responseXML.documentElement
    	if (xResponse.getAttribute("has_alerts")=="1") {
    		inlinePopup(xResponse.getAttribute("title"),
    							 getHtmlFromXml(xResponse))
    	}
    }
  }	
  bRequestActive = false
}
function alertFormSubmitted() {
	submitAlertForm()
	return false
}
function submitAlertForm(sRedirectUrl) {
	if (sRedirectUrl==null) {
		sRedirectUrl=""
	}
	document.getElementById("redirect_url").value=sRedirectUrl
	if(document.getElementById("syal_has_fields").value=="1") {
		postAJAXForm(document.getElementById("frm_sy_alert"), "/index.php/alerts", "AlertFormSubmitted")
  } else {
  	hideAlert()
 	}
}
function AlertFormSubmitted(xResponse) {
 	if (xResponse.documentElement.getAttribute("error")=="1") {
 		printAJAXAlerts()
 	} else {
 		if (xResponse.documentElement.getAttribute("redirect_url")!="") {
 			window.location = xResponse.documentElement.getAttribute("redirect_url")
		} else {
 			hideAlert()
 		}
	}
}
function printEmail(sDomain, sName,sTld) {
  return sName + "@" + sDomain + "." + sTld
}
function parseCurrency(value) {
	return parseFloat(value).toFixed(2)
}
function getFrameDimensions() {
	var ret = {};
	if (self.innerHeight) // all except Explorer
	{
	  ret.width = self.innerWidth;
	  ret.height = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight)
	  // Explorer 6 Strict Mode
	{
	  ret.width = document.documentElement.clientWidth;
	  ret.height = document.documentElement.clientHeight;
	}
	else if (document.body) // other Explorers
	{
	  ret.width = document.body.clientWidth;
	  ret.height = document.body.clientHeight;
	}
	return ret
}

function getPosition(obj) {
  var ret = { left:0, top:0 }
  if (obj.offsetParent) {
    ret.left = obj.offsetLeft
    ret.top = obj.offsetTop
    while (obj = obj.offsetParent) {
      ret.left += obj.offsetLeft
      ret.top += obj.offsetTop
    }
  }
  return ret;
}