
/**
 * ACID - AssoCIateD - A Simple System Or CMS Indicated to Associations or To Everybody Demanding (Silly isn't it ? I know...)
 * Author : Hervé LABAS <herve.labas@free.fr>
 * Date : 10/01/2006
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

// ------------------------------------------------ INITIALISATION --
var detect = navigator.userAgent.toLowerCase();
var OS,browser,version,total,thestring;
var _ajaxCmdUrl = "";
var faultString = "---- Echec ----";

if (checkIt('konqueror'))
{
	browser = "Konqueror";
	OS = "Linux";
}
else if (checkIt('safari')) browser = "Safari";
else if (checkIt('omniweb')) browser = "OmniWeb";
else if (checkIt('opera')) browser = "Opera";
else if (checkIt('webtv')) browser = "WebTV";
else if (checkIt('icab')) browser = "iCab";
else if (checkIt('msie')) browser = "Internet Explorer";
else if (!checkIt('compatible'))
{
	browser = "Netscape Navigator";
	version = detect.charAt(8);
}
else browser = "An unknown browser";

if (!version) version = detect.charAt(place + thestring.length);

if (!OS)
{
	if (checkIt('linux')) OS = "Linux";
	else if (checkIt('x11')) OS = "Unix";
	else if (checkIt('mac')) OS = "Mac";
	else if (checkIt('win')) OS = "Windows";
	else OS = "an unknown operating system";
}

function ieCSS(cssPath) {
	if (browser == "Internet Explorer")
	{
		if (version < 7)
		{
			document.write('<link rel="stylesheet" type="text/css" href="'+cssPath+'/ie.css" \/>');
			document.write('<link rel="stylesheet" type="text/css" href="'+cssPath+'/select-free.css" \/>');
		}
		else if (version == 7)
			document.write('<link rel="stylesheet" type="text/css" href="'+cssPath+'/ie7.css" \/>');
	}
}
function getObj(name)
{
  if (document.getElementById)
  {
  	this.obj = document.getElementById(name);
	if (this.obj != undefined)
		this.style = this.obj.style;
	else
		this.style = undefined;
  }
  else if (document.all)
  {
	this.obj = document.all[name];
	if (this.obj != undefined)
		this.style = this.obj.style;
	else
		this.style = undefined;
  }
  else if (document.layers)
  {
	this.obj = getObjNN4(document,name);
	if (this.obj != undefined)
		this.style = this.obj;
  }
}

function getObjNN4(obj,name)
{
	var x = obj.layers;
	var foundLayer;
	for (var i=0;i<x.length;i++)
	{
		if (x[i].id == name)
		 	foundLayer = x[i];
		else if (x[i].layers.length)
			var tmp = getObjNN4(x[i],name);
		if (tmp) foundLayer = tmp;
	}
	return foundLayer;
}

function checkIt(string)
{
	place = detect.indexOf(string) + 1;
	thestring = string;
	return place;
}

function confirm_del(id,url,page,text,sel) {

	if (confirm(text))
		document.location.href = url+"?p="+page+"&dd="+id;
}

var oField;
var sField;

function getOffsetTop(elm) {
	var mOffsetTop = elm.offsetTop;
	var mOffsetParent = elm.offsetParent;
	var parents_up = 6;
	
	while(parents_up > 0 && mOffsetParent.offsetParent) {
		mOffsetTop += mOffsetParent.offsetTop;
		mOffsetParent = mOffsetParent.offsetParent;
		parents_up--;
	}
	
	return mOffsetTop;
}

function getOffsetLeft(elm) {
	var mOffsetLeft = elm.offsetLeft;
	var mOffsetParent = elm.offsetParent;
	var parents_up = 6;
	
	while(parents_up > 0 && mOffsetParent.offsetParent) {
		mOffsetLeft += mOffsetParent.offsetLeft;
		mOffsetParent = mOffsetParent.offsetParent;
		parents_up--;
	}
	
	return mOffsetLeft;
}
function overMenu(id,sub,skinpath)
{
	var tmp = new getObj(id);
	tmp.style.background= sub ? menuOverSubBackColor : menuOverFirstBackColor;
}
function outMenu(id,sub,skinpath)
{
	var tmp = new getObj(id);
	tmp.style.background= sub ? menuStdSubBackColor : menuStdFirstBackColor;
}

function chooseDate(field,dateFormat,path,lang)
{
	if (lang == undefined)
		lang = 'fr';
	if (path == undefined)
		path = './';
	oField = new getObj(field);
	var buttonElt = new getObj("choose_"+field);
	var oDlg = new getObj('dateChooser');
	
	if (oDlg.style.display == 'block' && sField == field)
	{
		oDlg.obj.style.display = 'none';
		return;
	}
	
	if (isDateValid(oField.obj.value,dateFormat))
	{
		var ladate = (oField.obj.value).split("/");
		d = ladate[0];
		m = ladate[1];
		y = ladate[2];
		if (dateFormat == 'mm/dd/yyyy')
		{
			d = ladate[1];
			m = ladate[0];
			y = ladate[2];
		}
		oDlg.obj.src = path + "&f="+dateFormat + "&l="+lang+"&d="+d+"&m="+m+"&y="+y;
	}
	else
		oDlg.obj.src = path + "&f="+dateFormat + "&l="+lang;
	
	iLeftPos = findPosX(buttonElt.obj);
	iTopPos = findPosY(buttonElt.obj) + buttonElt.obj.offsetHeight + 4;
	oDlg.style.left = iLeftPos + "px";
	oDlg.style.top = iTopPos + "px";
	oDlg.style.display = 'block';
	
	sField = field;
}

function isDateValid(chaineDate,dateFormat) {
	if (chaineDate == "") return false
	iMonth = 1;
	iDay = 0;
	
	if (dateFormat == "mm/dd/yyy")
	{
		iMonth = 1;
		iDay = 0;
	}
		
	var ladate = (chaineDate).split("/")
	if ((ladate.length != 3) || isNaN(parseInt(ladate[0])) || isNaN(parseInt(ladate[iMonth])) || isNaN(parseInt(ladate[iDay]))) return false
	
	var unedate = new Date(eval(ladate[2]),eval(ladate[iMonth])-1,eval(ladate[iDay]))
	var annee = unedate.getYear()
	if ((Math.abs(annee)+"").length < 4) annee = annee + 1900
	
	return ((unedate.getDate() == eval(ladate[iDay])) && (unedate.getMonth() == eval(ladate[iMonth])-1) && (annee == eval(ladate[2])))
}
function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}
function chgDt(obj)
{
	var newURL = obj.options[obj.selectedIndex].value;
	document.location.href = newURL;
}

function setDate(date)
{
	oField.obj.value=date;
	var tmp = new getObj('dateChooser');
	tmp.style.display = 'none';
}
function changeMedia(id,over)
{
	var checkObj = new getObj('mediasel_'+id);
	var tmp = new getObj('media_'+id);
	var styleObj = tmp.style;
	var options = new getObj("options_"+id);
	if ((checkObj.obj != undefined && checkObj.obj.checked) || over)
	{
		styleObj.backgroundColor = mediaOverBackColor;
		styleObj.color = mediaOverTextColor;
		if (options.style != undefined)
			options.style.visibility = "visible";
	}
	else if (!over)
	{
		styleObj.backgroundColor = mediaStdBackColor;
		styleObj.color = mediaStdTextColor;
		if (options.style != undefined)
			options.style.visibility = "hidden";
	}
}

var elts = new Array();
function setSel(mode,prefix,divVisible)
{
	if (mode == undefined)
		mode = "invert";
	for (i=0; i<elts.length; i++) {
		var theID = elts[i];
		if (prefix != undefined)
			theID = prefix+elts[i];
		var tmp = new getObj(theID);
		switch (mode) {
			case "invert":
				tmp.obj.checked = !tmp.obj.checked;
				break;
			case "select":
				tmp.obj.checked = true;
				break;
			case "deselect":
				tmp.obj.checked = false;
				break;
		}
		if (divVisible != undefined)
		{
			changeMedia(elts[i],tmp.obj.checked);
		}
	}
}
var arSel = new Array();
function setRightSel(cat,mode,prefix)
{
	if (arSel[cat] == undefined)
		return;
	if (mode == undefined)
		mode = "invert";
	var changes = new Array();
	for (i=0; i<arSel[cat].length; i++) {
		var theID = arSel[cat][i];
		if (prefix != undefined)
			theID = prefix+arSel[cat][i];
		var tmp = new getObj(theID);
		switch (mode) {
			case "invert":
				changes[theID] = true;
				tmp.obj.checked = !tmp.obj.checked;
				break;
			case "select":
				if (tmp.obj.checked == false)
					changes[theID] = true;
				tmp.obj.checked = true;
				break;
			case "deselect":
				if (tmp.obj.checked == true)
					changes[theID] = true;
				tmp.obj.checked = false;
				break;
		}
	}
	for (i=0; i<arSel[cat].length; i++) {
		var theID = arSel[cat][i];
		if (prefix != undefined)
			theID = prefix+arSel[cat][i];
		if (rightOver[theID] != undefined && changes[theID] != undefined && changes[theID] == true)
		{
			changeRight(theID);
		}
	}
}

function showHide(id,imagesPath,blockPrefix,imgPrefix)
{
	var blockID = id;
	var imgObj = undefined;
	if (imagesPath != undefined)
	{
		blockID = blockPrefix+id;
		imgObj = new getObj(imgPrefix+id);
	}
	var tmp = new getObj(blockID);
	if (tmp.style.display != 'none')
	{
		tmp.style.display = 'none';
		if (imgObj != undefined)
			imgObj.obj.src = imagesPath+"/plus.png";
	}
	else
	{
		tmp.style.display = 'block';
		if (imgObj != undefined)
			imgObj.obj.src = imagesPath+"/minus.png";
	}
	//Effect.toggle(blockID,'blind');
}

function show(id)
{
	var tmp = new getObj(id);
	tmp.style.display = 'block';
}

function showHideLink(id,id2,id3)
{
	var tmp = new getObj(id);
	var tmp2 = new getObj(id2);
	var tmp3 = new getObj(id3);
	if (tmp.style.display != 'none')
	{
		tmp.style.display = 'none';
		tmp2.style.display = 'none';
		tmp3.style.display = 'inline';
	}
	else
	{
		tmp.style.display = 'inline';
		tmp2.style.display = 'inline';
		tmp3.style.display = 'none';
	}
}

function changeLog(selObj)
{
	var status = selObj.options[selObj.selectedIndex].value;
	var divObj = new getObj("dt_choose");
	var calendarObj = new getObj("choose_since_date");
	switch (status)
	{
		case "last_visit":
			divObj.style.visibility = "hidden";
			calendarObj.style.visibility = "hidden";
			break;
		default:
			divObj.style.visibility = "visible";
			calendarObj.style.visibility = "visible";
			break;
	}
}

function getCookieInfo(dataName)
{
     var cookieLen = dataName.length;
     var cookieData = document.cookie;
     var allcookieLen = cookieData.length;

     var i = 0;
     var cookieEnd;

     while(i < allcookieLen)
     {
          var j = i + cookieLen;
          if (cookieData.substring(i,j) == dataName)
          {
               cookieEnd = cookieData.indexOf(";", j);
               if (cookieEnd == -1)
               {
                    cookieEnd = cookieData.length;
               }
              return unescape(cookieData.substring(j+1, cookieEnd))
         }
         i++;
     }
	return faultString;
}

//----------------------- MENU MANAGEMENT
var openedMenus = new Array();
var expire = new Date();
var expTime = expire.getTime() + (15*24*60*60*1000);
expire.setTime(expTime);

if (getCookieInfo('ckieMenuState') == faultString)
	document.cookie = "ckieMenuState=; expires="+expire.toGMTString();
	
var cookieContent = getCookieInfo('ckieMenuState').split("_");

for (var i=0; i < cookieContent.length; i++)
{
	openedMenus[cookieContent[i]] = true;
}

function showHideMenu(id,linkID)
{
	var elt = new getObj("submenu"+id);
	var linkObj = new getObj(linkID);
	if (elt.style != undefined)
	{
		if (elt.style.display != "none")
		{
			delete openedMenus[id];
			//elt.style.display = "none";
			linkObj.obj.className = "them-closed";
		}
		else
		{
			openedMenus[id] = true;
			//elt.style.display = "block";
			linkObj.obj.className = "them-opened";
		}
		serializeToCookie();
		Effect.toggle("submenu"+id,'blind',{duration:0.5});
	}
}

function serializeToCookie()
{
	var tempString = "";
	for (var id in openedMenus)
	{
		tempString += (tempString.length == 0 ? "" : "_") + id;
	}
	document.cookie = "ckieMenuState="+tempString+"; expires="+expire.toGMTString();
}


// -----------------------------------RIGHTS ---
var rightOverrides = new Array();

// Rights override handling
function changeRight(right)
{
	if (rightOver[right] != undefined)
	{
		var curr = rightOver[right];
		var currChk = new getObj(right);
		currChk = currChk.obj;
		for (var i=0; i < curr.length; i++)
		{
			chkObj = new getObj(curr[i]);
			if (chkObj.obj != null)
			{
				if (rightOverrides[curr[i]] == undefined)
					rightOverrides[curr[i]] = 0;
				if (currChk.checked)
				{
					rightOverrides[curr[i]] = parseInt(rightOverrides[curr[i]]) + 1;
				}
				else
				{
					rightOverrides[curr[i]] = parseInt(rightOverrides[curr[i]]) - 1;
					if (rightOverrides[curr[i]] < 0)
						rightOverrides[curr[i]] = 0;
				}
				chkObj.obj.disabled = (rightOverrides[curr[i]] > 0);
				chkObj.obj.checked = (rightOverrides[curr[i]] > 0) ? true : initCheckboxes[curr[i]];
			}
		}
	}
	if (initCheckboxes[right] != undefined)
	{
		var currChk = new getObj(right);
		currChk = currChk.obj;
		initCheckboxes[right] = currChk.checked;
	}
}

function overRight(right,out)
{
	if (out == undefined)
		out = false;
	if (invertedRightsDep[right] != undefined)
	{
		for (var i=0; i < invertedRightsDep[right].length; i++)
		{
			var obj = new getObj('li_'+invertedRightsDep[right][i]);
			var init = new getObj('li_'+right);
			var chkInit = new getObj(right);
			if (obj.obj != undefined)
			{
				obj.obj.className = out ? "right" : "overRight";
			}
			if (init.obj != undefined)
			{
				init.obj.className = out ? "right" : (chkInit.obj.disabled ? "highRight" : "normalRight");
			}
		}
	}
}

// Takes media moves order changes
function changeMediaOrder()
{
	var serialized = Sortable.serialize("media_list");
	serialized = serialized.replace(/media_list\[\]=/g,"");
	serialized = serialized.replace(/&/g,";");
	var finalUrl  = _ajaxCmdUrl + "?cmd=reorderGallery&menu="+_menu+"&page="+_page+"&os="+_order+"&no="+serialized;
	var result = makeRequest(finalUrl);
}


// Just a tiny little bit of AJAX to handle the order change
var http_request = null;

function makeRequest(url) 
{
	if (window.XMLHttpRequest) // Mozilla, Safari,...
	{
		http_request = new XMLHttpRequest();
	}
	else if (window.ActiveXObject) // IE
	{
		http_request = new ActiveXObject("Microsoft.XMLHTTP");
	}
	http_request.onreadystatechange = alertContents;
	http_request.open('GET', url, true);
	http_request.send(null);

}

function alertContents()
{
	if (http_request.readyState == 4)
	{
		if (http_request.status == 200)
		{
			//alert(http_request.responseText);
			// Show confirmation message
		}
		else
		{
			//alert('There was a problem with the request.');
			// Show and error message
		}
	}
}

function obf(linkObj,mailAddress)
{
	linkObj.href = 'ma'+'il'+'t'+'o:'+mailAddress;
}

function changeTrombi(id,over)
{
	var checkObj = new getObj('trombisel_'+id);
	var tmp = new getObj('trombi_'+id);
	var styleObj = tmp.style;
	var options = new getObj("options_"+id);
	if ((checkObj.obj != undefined && checkObj.obj.checked) || over)
	{
		if (options.style != undefined)
			options.style.visibility = "visible";
	}
	else if (!over)
	{
		if (options.style != undefined)
			options.style.visibility = "hidden";
	}
}

