dims_window_onload_functions = new Array();

function dims_window_onload_stock(func) {
	dims_window_onload_functions[dims_window_onload_functions.length] = func;
}

function dims_window_onload_launch()
{
	window.onload = function() {
		for(i = 0; i < dims_window_onload_functions.length; i++) {
			dims_window_onload_functions[i]();
		}
	}
}

function dims_openwin(url,w,h,name)
{
   var top = (screen.height-(h+60))/2;
   var left = (screen.width-w)/2;

   if(name == '') name = 'dimswin';
   dimswin=window.open(url,name,'top='+top+',left='+left+',width='+w+', height='+h+', status=no, menubar=no, toolbar=no, scrollbars=yes, resizable=yes, screenY=20, screenX=20');
   dimswin.focus();
}


function dims_confirmform(form, message) {
	if (confirm(message)) form.submit();
}

function dims_confirmlink(link, message) {
	if (confirm(message)) location.href=link;
}

function dims_switchstyle(obj, opacity) {
	obj.style.filter='alpha(opacity:'+(opacity)+')';
	obj.style.MozOpacity = opacity/100;
}


function dims_switchdisplay(id) {
	e = dims_getelem(id);
	if (e) e.style.display = (e.style.display == 'none') ? 'block' : 'none';
}

/**
 * A class to parse color values
 * @author Stoyan Stefanov <sstoo@gmail.com>
 * @link   http://www.phpied.com/rgb-color-parser-in-javascript/
 * @license Use it if you like it
 */

function dims_rgbcolor(color_string) {
    this.ok = false;

    // strip any leading #
    if (color_string.charAt(0) == '#') { // remove # if any
        color_string = color_string.substr(1,6);
    }

    color_string = color_string.replace(/ /g,'');
    color_string = color_string.toLowerCase();

    // before getting into regexps, try simple matches
    // and overwrite the input
    var simple_colors = {
        aliceblue: 'f0f8ff',
        antiquewhite: 'faebd7',
        aqua: '00ffff',
        aquamarine: '7fffd4',
        azure: 'f0ffff',
        beige: 'f5f5dc',
        bisque: 'ffe4c4',
        black: '000000',
        noir: '000000',
        blanchedalmond: 'ffebcd',
        blue: '0000ff',
        bleu: '0000ff',
        blueviolet: '8a2be2',
        brown: 'a52a2a',
        burlywood: 'deb887',
        cadetblue: '5f9ea0',
        chartreuse: '7fff00',
        chocolate: 'd2691e',
        coral: 'ff7f50',
        cornflowerblue: '6495ed',
        cornsilk: 'fff8dc',
        crimson: 'dc143c',
        cyan: '00ffff',
        darkblue: '00008b',
        darkcyan: '008b8b',
        darkgoldenrod: 'b8860b',
        darkgray: 'a9a9a9',
        darkgreen: '006400',
        darkkhaki: 'bdb76b',
        darkmagenta: '8b008b',
        darkolivegreen: '556b2f',
        darkorange: 'ff8c00',
        darkorchid: '9932cc',
        darkred: '8b0000',
        darksalmon: 'e9967a',
        darkseagreen: '8fbc8f',
        darkslateblue: '483d8b',
        darkslategray: '2f4f4f',
        darkturquoise: '00ced1',
        darkviolet: '9400d3',
        deeppink: 'ff1493',
        deepskyblue: '00bfff',
        dimgray: '696969',
        dodgerblue: '1e90ff',
        feldspar: 'd19275',
        firebrick: 'b22222',
        floralwhite: 'fffaf0',
        forestgreen: '228b22',
        fuchsia: 'ff00ff',
        gainsboro: 'dcdcdc',
        ghostwhite: 'f8f8ff',
        gold: 'ffd700',
        goldenrod: 'daa520',
        gray: '808080',
        gris: '808080',
        green: '008000',
        vert: '008000',
        greenyellow: 'adff2f',
        honeydew: 'f0fff0',
        hotpink: 'ff69b4',
        indianred : 'cd5c5c',
        indigo : '4b0082',
        ivory: 'fffff0',
        khaki: 'f0e68c',
        lavender: 'e6e6fa',
        lavenderblush: 'fff0f5',
        lawngreen: '7cfc00',
        lemonchiffon: 'fffacd',
        lightblue: 'add8e6',
        lightcoral: 'f08080',
        lightcyan: 'e0ffff',
        lightgoldenrodyellow: 'fafad2',
        lightgrey: 'd3d3d3',
        lightgreen: '90ee90',
        lightpink: 'ffb6c1',
        lightsalmon: 'ffa07a',
        lightseagreen: '20b2aa',
        lightskyblue: '87cefa',
        lightslateblue: '8470ff',
        lightslategray: '778899',
        lightsteelblue: 'b0c4de',
        lightyellow: 'ffffe0',
        lime: '00ff00',
        limegreen: '32cd32',
        linen: 'faf0e6',
        magenta: 'ff00ff',
        maroon: '800000',
        mediumaquamarine: '66cdaa',
        mediumblue: '0000cd',
        mediumorchid: 'ba55d3',
        mediumpurple: '9370d8',
        mediumseagreen: '3cb371',
        mediumslateblue: '7b68ee',
        mediumspringgreen: '00fa9a',
        mediumturquoise: '48d1cc',
        mediumvioletred: 'c71585',
        midnightblue: '191970',
        mintcream: 'f5fffa',
        mistyrose: 'ffe4e1',
        moccasin: 'ffe4b5',
        navajowhite: 'ffdead',
        navy: '000080',
        oldlace: 'fdf5e6',
        olive: '808000',
        olivedrab: '6b8e23',
        orange: 'ffa500',
        orangered: 'ff4500',
        orchid: 'da70d6',
        palegoldenrod: 'eee8aa',
        palegreen: '98fb98',
        paleturquoise: 'afeeee',
        palevioletred: 'd87093',
        papayawhip: 'ffefd5',
        peachpuff: 'ffdab9',
        peru: 'cd853f',
        pink: 'ffc0cb',
        rose: 'ffc0cb',
        plum: 'dda0dd',
        powderblue: 'b0e0e6',
        purple: '800080',
        red: 'ff0000',
        rouge: 'ff0000',
        rosybrown: 'bc8f8f',
        royalblue: '4169e1',
        saddlebrown: '8b4513',
        salmon: 'fa8072',
        sandybrown: 'f4a460',
        seagreen: '2e8b57',
        seashell: 'fff5ee',
        sienna: 'a0522d',
        silver: 'c0c0c0',
        skyblue: '87ceeb',
        slateblue: '6a5acd',
        slategray: '708090',
        snow: 'fffafa',
        springgreen: '00ff7f',
        steelblue: '4682b4',
        tan: 'd2b48c',
        teal: '008080',
        thistle: 'd8bfd8',
        tomato: 'ff6347',
        turquoise: '40e0d0',
        violet: 'ee82ee',
        violetred: 'd02090',
        wheat: 'f5deb3',
        white: 'ffffff',
        blanc: 'ffffff',
        whitesmoke: 'f5f5f5',
        yellow: 'ffff00',
        jaune: 'ffff00',
        yellowgreen: '9acd32'
    };
    for (var key in simple_colors) {
        if (color_string == key) {
            color_string = simple_colors[key];
        }
    }
    // emd of simple type-in colors

    // array of color definition objects
    var color_defs = [
        {
            re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,
            example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'],
            process: function (bits){
                return [
                    parseInt(bits[1]),
                    parseInt(bits[2]),
                    parseInt(bits[3])
                ];
            }
        },
        {
            re: /^(\w{2})(\w{2})(\w{2})$/,
            example: ['#00ff00', '336699'],
            process: function (bits){
                return [
                    parseInt(bits[1], 16),
                    parseInt(bits[2], 16),
                    parseInt(bits[3], 16)
                ];
            }
        },
        {
            re: /^(\w{1})(\w{1})(\w{1})$/,
            example: ['#fb0', 'f0f'],
            process: function (bits){
                return [
                    parseInt(bits[1] + bits[1], 16),
                    parseInt(bits[2] + bits[2], 16),
                    parseInt(bits[3] + bits[3], 16)
                ];
            }
        }
    ];

    // search through the definitions to find a match
    for (var i = 0; i < color_defs.length; i++) {
        var re = color_defs[i].re;
        var processor = color_defs[i].process;
        var bits = re.exec(color_string);
        if (bits) {
            channels = processor(bits);
            this.r = channels[0];
            this.g = channels[1];
            this.b = channels[2];
            this.ok = true;
        }

    }

    // validate/cleanup values
    this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r);
    this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g);
    this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b);

    // some getters
    this.toRGB = function () {
        return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')';
    }
    this.toHex = function () {
        var r = this.r.toString(16);
        var g = this.g.toString(16);
        var b = this.b.toString(16);
        if (r.length == 1) r = '0' + r;
        if (g.length == 1) g = '0' + g;
        if (b.length == 1) b = '0' + b;
        return '#' + r + g + b;
    }

    // help
    this.getHelpXML = function () {

        var examples = new Array();
        // add regexps
        for (var i = 0; i < color_defs.length; i++) {
            var example = color_defs[i].example;
            for (var j = 0; j < example.length; j++) {
                examples[examples.length] = example[j];
            }
        }
        // add type-in colors
        for (var sc in simple_colors) {
            examples[examples.length] = sc;
        }

        var xml = document.createElement('ul');
        xml.setAttribute('id', 'rgbcolor-examples');
        for (var i = 0; i < examples.length; i++) {
            try {
                var list_item = document.createElement('li');
                var list_color = new dims_rgbcolor(examples[i]);
                var example_div = document.createElement('div');
                example_div.style.cssText =
                        'margin: 3px; '
                        + 'border: 1px solid black; '
                        + 'background:' + list_color.toHex() + '; '
                        + 'color:' + list_color.toHex()
                ;
                example_div.appendChild(document.createTextNode('test'));
                var list_item_value = document.createTextNode(
                    ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex()
                );
                list_item.appendChild(example_div);
                list_item.appendChild(list_item_value);
                xml.appendChild(list_item);

            } catch(e){}
        }
        return xml;

    }

}

function dims_validatefield(field_label, field_object, field_type)
{
	var ok = true;
	var i;
	var nbpoint = 0;
	var msg = new String();
	var reg = new RegExp("<FIELD_LABEL>","gi");

	if (field_object)
	{
		field_value = field_object.value;
		if (field_type == 'selected')
		{
			msg = lstmsg[9];
			ok = (field_object.selectedIndex >= 0);
		}

		if (field_type == 'checked')
		{
			msg = lstmsg[9];
			ok = false;
			for (c = 0; c < field_object.length; c++)
			{
				if (field_object[c].checked) ok = true;
			}
		}

		if (field_type == 'email')
		{

			var email = field_value;
			var aroba = email.indexOf("@");

			if (aroba == -1)
			{
				ok = false;
				msg = lstmsg[0];
			}

			if (ok)
			{
				var point = email.indexOf(".", aroba);
				if ((point == -1) || (point == (aroba + 1)))
				{
					ok=false;
					msg = lstmsg[1];
				}
			}

			if (ok)
			{
				var point = email.lastIndexOf(".");
				if ((point + 1) == email.length)
				{
					ok = false;
					msg = lstmsg[2];
				}
			}

			if (ok)
			{
				point = email.indexOf("..")
				if (point != -1)
				{
					ok = false;
					msg = lstmsg[3];
				}
			}
		}

		if (field_type == 'emptyemail')
		{
			if (field_value.length!=0)
			{
				var email = field_value;
				var aroba = email.indexOf("@");

				if (aroba == -1)
				{
					ok = false;
					msg = lstmsg[0];
				}

				if (ok)
				{
					var point = email.indexOf(".", aroba);
					if ((point == -1) || (point == (aroba + 1)))
					{
						ok=false;
						msg = lstmsg[1];
					}
				}

				if (ok)
				{
					var point = email.lastIndexOf(".");
					if ((point + 1) == email.length)
					{
						ok = false;
						msg = lstmsg[2];
					}
				}

				if (ok)
				{
					point = email.indexOf("..")
					if (point != -1)
					{
						ok = false;
						msg = lstmsg[3];
					}
				}
			}
		}

		if (field_type == 'color')
		{
			var color = new dims_rgbcolor(field_value);
			if (!color.ok)
			{
				ok = false;
				msg = lstmsg[10];
			}
		}

		if (field_type == 'string')
		{
			if (field_value.replace(/(^\s*)|(\s*$)/g,'').length==0)
			{
				ok = false;
				msg = lstmsg[4];
			}
		}

		if (field_type == 'int')
		{
			if (field_value.length==0 || field_value.length>12) ok = false;
			for (i=0;i<field_value.length;i++)
			{
				if (field_value.charAt(i)<'0' || field_value.charAt(i)>'9') ok = false;
			}
			if (!ok) msg = lstmsg[5];
		}

		if (field_type == 'emptyint')
		{
			if (field_value.length>12) ok = false;
			for (i=0;i<field_value.length;i++)
			{
				if (field_value.charAt(i)<'0' || field_value.charAt(i)>'9') ok = false;
			}
			if (!ok) msg = lstmsg[5];
		}

		if (field_type == 'float')
		{
			if (field_value.length==0) ok = false;
			for (i=0;i<field_value.length;i++)
			{
				if (field_value.charAt(i)=='.' || field_value.charAt(i)==',') nbpoint++;
				else if (field_value.charAt(i)<'0' || field_value.charAt(i)>'9') ok = false;
			}
			if (nbpoint>1) ok = false;

			if (!ok) msg = lstmsg[6];
		}

		if (field_type == 'emptyfloat')
		{
			for (i=0;i<field_value.length;i++)
			{
				if (field_value.charAt(i)=='.') nbpoint++;
				if (field_value.charAt(i)<'0' || field_value.charAt(i)>'9') ok = false;
			}
			if (nbpoint>1) ok = false;

			if (!ok) msg = lstmsg[6];
		}

		if (field_type == 'date')
		{
			var thedate = field_value.split("/");
			if (thedate.length != 3 || isNaN(parseInt(thedate[0])) || isNaN(parseInt(thedate[1])) || isNaN(parseInt(thedate[2]))) thedate = field_value.split("-");
			if (thedate.length != 3 || isNaN(parseInt(thedate[0])) || isNaN(parseInt(thedate[1])) || isNaN(parseInt(thedate[2]))) thedate = field_value.split(":");
			if (thedate.length != 3 || isNaN(parseInt(thedate[0])) || isNaN(parseInt(thedate[1])) || isNaN(parseInt(thedate[2]))) ok = false;
			if (ok)
			{
				var datetotest = new Date(eval(thedate[2]),eval(thedate[1])-1,eval(thedate[0]));
				var year = datetotest.getYear()
				if ((Math.abs(year)+"").length < 4) year = year + 1900
				ok = ((datetotest.getDate() == eval(thedate[0])) && (datetotest.getMonth() == eval(thedate[1])-1) && (year == eval(thedate[2])));
			}
			if (!ok) msg = lstmsg[7];
		}

		if (field_type == 'time')
		{
			if (field_value.length!=5) ok = false;
			else
			{
				h=field_value.substring(0,2);
				m=field_value.substring(3,5);
				if (parseInt(h)<0 || parseInt(h)>23) ok = false;
				if (parseInt(m)<0 || parseInt(m)>59) ok = false;
				madate=new Date(01,01,2000,h,m);
				if (madate=="NaN" || field_value.charAt(2)!=':') ok = false;
			}
			if (!ok) msg = lstmsg[8];
		}

		if (field_type=='emptydate')
		{
			if (field_value.length!=0)
			{
				var thedate = field_value.split("/");
				if (thedate.length != 3 || isNaN(parseInt(thedate[0])) || isNaN(parseInt(thedate[1])) || isNaN(parseInt(thedate[2]))) thedate = field_value.split("-");
				if (thedate.length != 3 || isNaN(parseInt(thedate[0])) || isNaN(parseInt(thedate[1])) || isNaN(parseInt(thedate[2]))) thedate = field_value.split(":");
				if (thedate.length != 3 || isNaN(parseInt(thedate[0])) || isNaN(parseInt(thedate[1])) || isNaN(parseInt(thedate[2]))) ok = false;
				if (ok)
				{
					var datetotest = new Date(eval(thedate[2]),eval(thedate[1])-1,eval(thedate[0]));
					var year = datetotest.getYear()
					if ((Math.abs(year)+"").length < 4) year = year + 1900
					ok = ((datetotest.getDate() == eval(thedate[0])) && (datetotest.getMonth() == eval(thedate[1])-1) && (year == eval(thedate[2])));
				}
				if (!ok) msg = lstmsg[7];
			}
		}

		if (field_type=='emptytime')
		{
			if (field_value.length!=0)
			{
				if (field_value.length!=5) ok = false;
				else
				{
					h=field_value.substring(0,2);
					m=field_value.substring(3,5);
					if (parseInt(h)<0 || parseInt(h)>23) ok = false;
					if (parseInt(m)<0 || parseInt(m)>59) ok = false;
					madate=new Date(01,01,2000,h,m);
					if (madate=="NaN" || field_value.charAt(2)!=':') ok = false;
				}
				if (!ok) msg = lstmsg[8];
			}
		}
	}
	else
	{
		ok = false;
	}

	if (!ok)
	{
		alert(msg.replace(reg,field_label));
		if (field_type != 'checked')
		{
			field_object.style.background = error_bgcolor;
			field_object.focus();
		}
	}

	return (ok);
}


function dims_checkall(form, mask, value, byid)
{
	var len = form.elements.length;
	var reg = new RegExp(mask,"g");

	if (isNaN(byid)) byid = false;
	
	for (var i = 0; i < len; i++)
	{
		var e = form.elements[i];
		if (byid) { if (e.id.match(reg)) e.checked = value; }
		else if (e.name.match(reg)) e.checked = value;
	}
}

var	timer_started = false;
var 	popup_displayed = false;
var	posx = 0;
var	posy = 0;
var	msg = 'empty';

function dims_showpopup_delayed(w,namepopup)
{
	if (timer_started)
	{
		w = parseInt(w);
                if (namepopup=="" || namepopup==null) namepopup="dims_popup";
		var dims_popup = dims_getelem(namepopup);
                
//		with (dims_popup.style)
//		{

			dims_popup.style.display = 'none';
			//dims_popup.innerHTML = msg+' '+posx+','+posy;
			dims_popup.innerHTML = msg;

			tmpleft = parseInt(posx) + 20;
			tmptop = parseInt(posy);

			if (w > 0) dims_popup.style.width = w+'px';
			else w = parseInt(dims_popup.offsetWidth);

			if (20 + w + parseInt(tmpleft) > parseInt(document.body.offsetWidth))
			{
				tmpleft =parseInt(document.body.offsetWidth) - w - 120;
			}
			
			if (tmptop+200>parseInt(document.body.offsetHeight) && tmptop > 300)
				dims_popup.style.top = (tmptop-200)+'px';
			else
				dims_popup.style.top = tmptop+'px';
			
			dims_popup.style.left = tmpleft+'px';
			dims_popup.style.display = 'block';
			dims_popup.style.visibility = 'visible';
//		}

		popup_displayed = true;
	}
}


function dims_addslashes(str)
{
	str = str.replace(/\\/g,"\\\\");
	str = str.replace(/\'/g,"\\'");
	str = str.replace(/\"/g,"\\\"");
	return(str);
}

function dims_showpopup(message, w, e, origine,namepopup,decalx,decaly)
{
	if (namepopup=="" || namepopup==null) namepopup="dims_popup";
        if (decalx=="" || decalx==null) decalx=0;
        else decalx=decalx*1;
        
        if (decaly=="" || decaly==null) decaly=0;
        else decaly=decaly*1;
        
        msg = message;
	if (w == '') w = 200;

	if (!origine) var origine = '';

	if (!e) var e = window.event;

	if (e.pageX || e.pageY)	{
		posx = e.pageX;
		posy = e.pageY ;
	}
	else if (e.clientX || e.clientY) {
		posx = e.clientX + document.body.scrollLeft;
		posy = e.clientY + document.body.scrollTop;
	}
	
        if (decalx!=0) posx=posx+decalx;
        if (decaly!=0) posy=posy+decaly;
        
	if (origine == 'click')
	{
		timer_started = true;
		dims_showpopup_delayed(w,namepopup);
	}
	else
	{
		if (!timer_started)
		{
			timer_started = true;
                        
			setTimeout("dims_showpopup_delayed("+w+",'"+namepopup+"')", 10*timerdelay);
		}

		if (popup_displayed) dims_showpopup_delayed(w,namepopup);
	}

}

function dims_movepopup(e,namepopup)
{
        if (namepopup=="" || namepopup==null) namepopup="dims_popup";
	if (!e) var e = window.event;

	if (e.pageX || e.pageY)	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) {
		posx = e.clientX + document.body.scrollLeft;
		posy = e.clientY + document.body.scrollTop;
	}

	if (popup_displayed) dims_showpopup_delayed(0,namepopup);
}

function dims_hidepopup(namepopup)
{
        if (namepopup=="" || namepopup==null) namepopup="dims_popup";
	timer_started = false;
	popup_displayed = false;

	var dims_popup = (document.getElementById) ? document.getElementById(namepopup) : eval("document.all["+namepopup+"]");
	with (dims_popup.style)
	{
		display = 'none';
		visibility = 'hidden';
	}
}

function dims_sleep(t)
{
	setTimeout("dims_wakeup()", t*timerdelay);
}

function dims_wakeup() {}

function dims_getelem(elem, doc)
{
	if (!doc) doc = document;
	return (doc.getElementById) ? doc.getElementById(elem) : eval("document.all['"+dims_addslashes(elem)+"']");
}

function dims_tickets_search_users(filter)
{
	dims_getxmlhttp_ext('index-light.php','dims_op=tickets_search_users&dims_ticket_userfilter='+filter,0,'div_ticket_search_result');
}

function dims_tickets_new(event, id_object, id_record, object_label)
{
	var data = '';

	if (object_label) data += '&object_label='+object_label;
	if (id_object) data += '&id_object='+id_object;
	if (id_record) data += '&id_record='+id_record;

	dims_showpopup('',400,event,'click');dims_xmlhttprequest_todiv('admin.php','dims_op=tickets_new'+data,'','dims_popup');
}


function dims_gethttpobject(callback)
{
	var xmlhttp = false;

	/*@cc_on
	@if (@_jscript_version >= 5)
	try
	{
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch (e)
	{
		try
		{
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (E)
		{
			xmlhttp = false;
		}
	}
	@else
	xmlhttp = false;
	@end @*/

	/* on essaie de créer l'objet si ce n'est pas déjà fait */
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined')
	{
		try
		{
			xmlhttp = new XMLHttpRequest();
		}
		catch (e)
		{
			xmlhttp = false;
		}
	}

	return xmlhttp;
}

/**
  * Envoie des données à l'aide d'XmlHttpRequest?
  * @param string methode d'envoi ['GET'|'POST']
  * @param string url
  * @param string données à envoyer sous la forme var1=value1&var2=value2...
  */
function dims_sendxmldata(method, url, data, xmlhttp, asynchronous)
{
    if (!xmlhttp)
    {
        return false;
    }

    if(method == "GET")
	{
		if(data == 'null')
		{
			xmlhttp.open("GET", url, asynchronous);
			xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=ISO-8859-15');
		}
		else
		{
			xmlhttp.open("GET", url+"?"+data, asynchronous);
			xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=ISO-8859-15');
		}
		xmlhttp.send(null);
	}
	else if(method == "POST")
	{
		xmlhttp.open("POST", url, asynchronous);
		xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=ISO-8859-15');
		xmlhttp.send(data);
	}
	return true;
}

function dims_xmlhttprequest(url, data, asynchronous, getxml)
{
	if (isNaN(asynchronous)) asynchronous = false;
	if (isNaN(getxml)) getxml = false;

	xmlhttp = dims_gethttpobject();
	dims_sendxmldata('GET', url, data, xmlhttp, asynchronous);

	// if asynchronous = false => return request content
	if (getxml) return(xmlhttp.responseXML);
	else return(xmlhttp.responseText);
}


function dims_xmlhttprequest_tofunction(url, data, callback, ticket, getxml)
{
    var xmlhttp = dims_gethttpobject();

	if (isNaN(getxml)) getxml = false;

	if (xmlhttp)
	{
		/* on définit ce qui doit se passer quand la page répondra */
		xmlhttp.onreadystatechange=function()
		{
			if (xmlhttp.readyState == 4) /* 4 : état "complete" */
			{
				if (xmlhttp.status == 200) /* 200 : code HTTP pour OK */
				{
					
					if (getxml) callback(xmlhttp.responseXML,ticket);
					else {
						callback(xmlhttp.responseText,ticket);
					}
				}
			}
		}
	}
	return !dims_sendxmldata('GET', url, data, xmlhttp, true);
}


function dims_xmlhttprequest_todiv(url, data, sep)
{
    var xmlhttp = dims_gethttpobject();
	var args;
	
	if (xmlhttp)
	{
		args = dims_xmlhttprequest_todiv.arguments;

		/* on définit ce qui doit se passer quand la page répondra */
		xmlhttp.onreadystatechange=function()
		{
			if (!isNaN(xmlhttp.readyState) && xmlhttp.readyState == 4) /* 4 : état "complete" */
			{
				if (xmlhttp.status == 200) /* 200 : code HTTP pour OK */
				{
					var tabxmlvalue = new Array();
					var result= xmlhttp.responseText;

					if (sep == '') tabxmlvalue[0] = result;
					else tabxmlvalue=result.split(sep);
					for(i=0;i<args.length-3;i++)
					{
						if (tabxmlvalue[i]) {
							dims_getelem(args[i+3]).innerHTML = tabxmlvalue[i];
							/* modify by pat to evaluate javascript */							
							var x = dims_getelem(args[i+3]).getElementsByTagName("script");
							for(var i=0;i<x.length;i++) {
								eval(x[i].text);
							}
						}
						else dims_getelem(args[i+3]).innerHTML = '';
					}
				}
			}
		}
	}
	return !dims_sendxmldata('GET', url, data, xmlhttp, true);
}

function dims_ajaxloader(div)
{
	var ajaxloader = '<div style="text-align:center;padding:40px 10px;"><img src="./img/ajax-loader.gif"></div>';
	
	if (div && $(div)) $(div).innerHTML = ajaxloader;
	else return ajaxloader;
}

function dims_innerHTML(div, html)
{
	if ($(div)) {
		$(div).innerHTML = html;
		$(div).innerHTML.evalScripts();
	}
}

// SHARE MANAGEMENT

function dims_share_searchdata()
{
	dims_xmlhttprequest_todiv('index-light.php','dims_op=search_list&text=','','contentsearch');
}

function dims_share_add_elem(typeshare,idshare)
{
	dims_xmlhttprequest_todiv('index-light.php','dims_op=add_elem&type_share='+typeshare+'&id_share='+idshare,'','contentattach');
}

function dims_share_del_elem(typeshare,idshare)
{
	dims_xmlhttprequest_todiv('index-light.php','dims_op=del_elem&type_share='+typeshare+'&id_share='+idshare,'','contentattach');
}

function dims_share_contentattach()
{
	var ts=document.getElementById('contentattach');
	dims_xmlhttprequest_todiv('index-light.php','dims_op=contentattach','','contentattach');
}



var tag_timer;
var tag_search;
var tag_results = new Array();

var tag_last_array = new Array();
var tag_new_array = new Array();

var tag_lastedit = '';
var tag_modified = -1

function dims_tag_init(idrecord)
{
	dims_getelem('dims_annotationtags_'+idrecord).onkeyup = dims_tag_keyup;
	dims_getelem('dims_annotationtags_'+idrecord).onkeypress = dims_tag_keypress;
}

function dims_tag_search(idrecord, search)
{
	clearTimeout(tag_timer);
	tag_search = search;
	tag_timer = setTimeout("dims_tag_searchtimeout("+idrecord+")", 100);
}

function dims_tag_searchtimeout(idrecord)
{
	// replace(/(^\s*)|(\s*$)/g,'') = TRIM
	list_tags = tag_search.split(' ');

	if (list_tags.length>0) dims_xmlhttprequest_tofunction('index-quick.php','dims_op=tags_search&tag='+list_tags[list_tags.length-1],dims_tag_display,idrecord);
}

function dims_tag_display(result,ticket)
{
	if (result != '')
	{
		tag_results = new Array();

		splited_result = result.split('|');
		tagstoprint = '';

		for (i=0;i<splited_result.length;i++)
		{
			detail = splited_result[i].split(';');
			if (tagstoprint != '') tagstoprint += ' ';
			if (i==0) tagstoprint += '<b>';
			tagstoprint += '<a href="javascript:dims_tag_complete('+ticket+','+i+')">'+detail[0]+'</a> ('+detail[1]+')';
			if (i==0) tagstoprint += '</b>';
			tag_results[i] = detail[0];
		}

		dims_getelem('tagsfound_'+ticket).innerHTML = tagstoprint;
	}
	else
	{
		dims_getelem('tagsfound_'+ticket).innerHTML = '';
		tag_results = new Array();
	}
}

function dims_tag_prevent(e)
{
	if (window.event) window.event.returnValue = false
	else e.preventDefault()
}



function dims_tag_keypress(e)
{
	e=e||window.event;
	src = (e.srcElement) ? e.srcElement : e.target;

	switch(e.keyCode)
	{
		case 38: case 40:
			prevent(e)
		break
		case 9:
			dims_tag_prevent(e)
		break
		case 13:
			dims_tag_prevent(e)
		break
		default:
			tag_lastedit = dims_getelem(src.id).value;
		break;
	}
}

function dims_tag_keyup(e)
{
	e=e||window.event;
	src = (e.srcElement) ? e.srcElement : e.target; // get source field
	idrecord = src.id.split('_')[2]; // get id record from source field id

	switch(e.keyCode)
	{
		case 38: case 40:
			prevent(e);
		break
		case 9:
			dims_tag_complete(idrecord);
			dims_tag_prevent(e);
		break
		case 13:
			dims_tag_complete(idrecord);
			dims_tag_prevent(e);
		break
		case 35: //end
		case 36: //home
		case 39: //right
		case 37: //left
		//case 32: //space
		break
		default:
			tag_last_array = new Array();
			tag_new_array = new Array();

			tag_last_array = tag_lastedit.split(' ');
			tag_new_array = dims_getelem(src.id).value.split(' ');

			tag_modified = -1;
			for (i=0;i<tag_new_array.length;i++)
			{
				if (tag_new_array[i] != tag_last_array[i])
				{
					if (tag_modified == -1) tag_modified = i;
					else tag_modified = -2
				}
			}
			if (tag_modified>=0) dims_tag_search(idrecord, tag_new_array[tag_modified]);
		break;
	}
}

function dims_tag_complete(idrecord, idtag)
{
	if (!(idtag>=0)) idtag = 0;

	if (tag_results[idtag])
	{
		tag_new_array[tag_modified] = tag_results[idtag];

		taglist = '';
		for (i=0;i<tag_new_array.length;i++)
		{
			if (taglist != '') taglist += ' ';
			taglist += tag_new_array[i]
		}

		dims_getelem('dims_annotationtags_'+idrecord).value = taglist.replace(/(^\s*)|(\s*$)/g,'')+' ';
		dims_getelem('tagsfound_'+idrecord).innerHTML = '';
	}

	tag_results = new Array();
}


function dims_calendar_open(inputfield_id, event)
{
	dims_showpopup('',164,event,'click');
	dims_xmlhttprequest_todiv('admin-light.php','dims_op=calendar_open&selected_date='+dims_getelem(inputfield_id).value+'&inputfield_id='+inputfield_id,'','dims_popup');
}

function dims_submitmac()
{
	document.formlogin.dims_usermac.value = document.mac.getMacaddress();
}

/* COLORPICKER FUNCTIONS */

var rgb, hsv;

function colorpicker_hex2rgb(hex_string, default_)
{
	if (default_ == undefined)
	{
		default_ = null;
	}

	if (hex_string.substr(0, 1) == '#')
	{
		hex_string = hex_string.substr(1);
	}
	
	var r;
	var g;
	var b;
	if (hex_string.length == 3)
	{
		r = hex_string.substr(0, 1);
		r += r;
		g = hex_string.substr(1, 1);
		g += g;
		b = hex_string.substr(2, 1);
		b += b;
	}
	else if (hex_string.length == 6)
	{
		r = hex_string.substr(0, 2);
		g = hex_string.substr(2, 2);
		b = hex_string.substr(4, 2);
	}
	else
	{
		return default_;
	}
	
	r = parseInt(r, 16);
	g = parseInt(g, 16);
	b = parseInt(b, 16);
	if (isNaN(r) || isNaN(g) || isNaN(b))
	{
		return default_;
	}
	else
	{
		return {r: r / 255, g: g / 255, b: b / 255};
	}
}

function colorpicker_rgb2hex(r, g, b, includeHash)
{
	r = Math.round(r * 255);
	g = Math.round(g * 255);
	b = Math.round(b * 255);
	if (includeHash == undefined)
	{
		includeHash = true;
	}
	
	r = r.toString(16);
	if (r.length == 1)
	{
		r = '0' + r;
	}
	g = g.toString(16);
	if (g.length == 1)
	{
		g = '0' + g;
	}
	b = b.toString(16);
	if (b.length == 1)
	{
		b = '0' + b;
	}
	return ((includeHash ? '#' : '') + r + g + b).toUpperCase();
}

			
function colorpicker_hsv2rgb(hue, saturation, value)
{
	var red;
	var green;
	var blue;
	if (value == 0.0)
	{
		red = 0;
		green = 0;
		blue = 0;
	}
	else
	{
		var i = Math.floor(hue * 6);
		var f = (hue * 6) - i;
		var p = value * (1 - saturation);
		var q = value * (1 - (saturation * f));
		var t = value * (1 - (saturation * (1 - f)));
		switch (i)
		{
			case 1: red = q; green = value; blue = p; break;
			case 2: red = p; green = value; blue = t; break;
			case 3: red = p; green = q; blue = value; break;
			case 4: red = t; green = p; blue = value; break;
			case 5: red = value; green = p; blue = q; break;
			case 6: // fall through
			case 0: red = value; green = t; blue = p; break;
		}
	}
	return {r: red, g: green, b: blue};
}

function colorpicker_rgb2hsv(red, green, blue)
{
	var max = Math.max(Math.max(red, green), blue);
	var min = Math.min(Math.min(red, green), blue);
	var hue;
	var saturation;
	var value = max;
	if (min == max)
	{
		hue = 0;
		saturation = 0;
	}
	else
	{
		var delta = (max - min);
		saturation = delta / max;
		if (red == max)
		{
			hue = (green - blue) / delta;
		}
		else if (green == max)
		{
			hue = 2 + ((blue - red) / delta);
		}
		else
		{
			hue = 4 + ((red - green) / delta);
		}
		hue /= 6;
		if (hue < 0)
		{
			hue += 1;
		}
		if (hue > 1)
		{
			hue -= 1;
		}
	}
	return {
		h: hue,
		s: saturation,
		v: value
	};
}

function colorpicker_initelements()
{
	x = (hsv.v*199)-5;
	if (x<-5) x=-5;
	if (x>194) x=194; 
	dims_getelem('colorpicker_crosshairs').style.left = x.toString() + 'px';
	y = ((1-hsv.s)*199)-5;
	if (y<-5) y=-5;
	if (y>194) y=194; 
	dims_getelem('colorpicker_crosshairs').style.top = y.toString() + 'px';
	x = (hsv.h*199)-5;
	if (x<-5) x=-5;
	if (x>194) x=194; 
	dims_getelem('colorpicker_position').style.top = x.toString() + 'px';
}

function colorpicker_colorchanged()
{
	var hex = colorpicker_rgb2hex(rgb.r, rgb.g, rgb.b);
	var hueRgb = colorpicker_hsv2rgb(hsv.h, 1, 1);
	var hueHex = colorpicker_rgb2hex(hueRgb.r, hueRgb.g, hueRgb.b);
	dims_getelem('colorpicker_selectedcolor').style.background = hex;
	dims_getelem('colorpicker_inputcolor').value = hex;
	dims_getelem('colorpicker_sv').style.background = hueHex;
}

function colorpicker_rgbchanged()
{
	hsv = colorpicker_rgb2hsv(rgb.r, rgb.g, rgb.b);
	colorpicker_colorchanged();
}
function colorpicker_hsvchanged()
{
	rgb = colorpicker_hsv2rgb(hsv.h, hsv.s, hsv.v);
	colorpicker_colorchanged();
}
		

function colorpicker_pagecoords(node)
{
	var x = node.offsetLeft;
	var y = node.offsetTop;
	var parent = node.offsetParent;
	while (parent != null)
	{
		x += parent.offsetLeft;
		y += parent.offsetTop;
		parent = parent.offsetParent;
	}
	return {x: x, y: y};
}


function colorpicker_fixcoords(node, x, y)
{
	var nodePageCoords = colorpicker_pagecoords(node);
	x = (x - nodePageCoords.x) + document.documentElement.scrollLeft;
	y = (y - nodePageCoords.y) + document.documentElement.scrollTop;
	if (x < 0) x = 0;
	if (y < 0) y = 0;
	if (x > node.offsetWidth - 1) x = node.offsetWidth - 1;
	if (y > node.offsetHeight - 1) y = node.offsetHeight - 1;
	return {x: x, y: y};
}

function colorpicker_onmousedown(e)
{
	e=e||window.event;
	src = (e.srcElement) ? e.srcElement : e.target; // get source field
	
	coords = colorpicker_fixcoords(src, e.clientX, e.clientY);
	
	if (src.id == 'colorpicker_sv')
	{
		colorpicker_placeelement('colorpicker_crosshairs',coords.x,coords.y);
	}
	else if (src.id == 'colorpicker_crosshairs')
	{
		x = parseInt(dims_getelem('colorpicker_crosshairs').style.left) + coords.x;
		y = parseInt(dims_getelem('colorpicker_crosshairs').style.top) + coords.y;
		colorpicker_placeelement('colorpicker_crosshairs',x,y);
	}
	else if (src.id == 'colorpicker_h')
	{
		colorpicker_placeelement('colorpicker_position',0,coords.y);
	}
	else if (src.id == 'colorpicker_position')
	{
		y = parseInt(dims_getelem('colorpicker_position').style.top) + coords.y;
		colorpicker_placeelement('colorpicker_position',0,y);
	}
}

	
function colorpicker_placeelement(element,x,y)
{
	if (x<0) x=0;
	if (x>199) x=199;
	
	if (y<0) y=0;
	if (y>199) y=199;
	
	if (element == 'colorpicker_position')
	{
		dims_getelem('colorpicker_position').style.top = (y-5) + 'px';
		hsv.h = y/199;
	}
	else if (element == 'colorpicker_crosshairs')
	{
		dims_getelem('colorpicker_crosshairs').style.left = (x-5) + 'px';
		dims_getelem('colorpicker_crosshairs').style.top = (y-5) + 'px';
		hsv.s = 1-(y/199);
		hsv.v = (x/199);
	}
	
	colorpicker_hsvchanged();
}


function colorpicker_input_onchange()
{
	rgb = colorpicker_hex2rgb(dims_getelem('colorpicker_inputcolor').value, {r: 0, g: 0, b: 0});
	colorpicker_rgbchanged();
	colorpicker_initelements();
}

function colorpicker_start()
{
	dims_getelem('colorpicker_sv').onmousedown = colorpicker_onmousedown;
	dims_getelem('colorpicker_h').onmousedown = colorpicker_onmousedown;
	dims_getelem('colorpicker_position').onmousedown = colorpicker_onmousedown;
	dims_getelem('colorpicker_crosshairs').onmousedown = colorpicker_onmousedown;
	dims_getelem('colorpicker_inputcolor').onchange = colorpicker_input_onchange;

	colorpicker_input_onchange();
}

function dims_colorpicker_open(inputfield_id, event)
{
	dims_showpopup('','241',event,'click');
	data = 'dims_op=colorpicker_open&inputfield_id='+inputfield_id+'&colorpicker_value='+escape(dims_getelem(inputfield_id).value);
	colorpickerhtml = dims_xmlhttprequest('admin-light.php',data);
	dims_getelem('dims_popup').innerHTML = colorpickerhtml;
	colorpicker_start();
}

/* DOCUMENTS FUNCTIONS */

function dims_documents_openfolder(currentfolder, documentsfolder_id, event)
{
	dims_showpopup('',300,event,'click');
	dims_xmlhttprequest_todiv('admin-light.php','dims_op=documents_openfolder&currentfolder='+currentfolder+'&documentsfolder_id='+documentsfolder_id,'','dims_popup');
}

function dims_documents_openfile(currentfolder, documentsfile_id, event)
{
	dims_showpopup('',380,event,'click');
	dims_xmlhttprequest_todiv('admin-light.php','dims_op=documents_openfile&currentfolder='+currentfolder+'&documentsfile_id='+documentsfile_id,'','dims_popup');
}

function dims_documents_deletefile(currentfolder, documents_id, documentsfile_id)
{
	dims_xmlhttprequest_todiv('admin-light.php','dims_op=documents_deletefile&currentfolder='+currentfolder+'&documentsfile_id='+documentsfile_id,'','dimsdocuments_'+documents_id);
}

function dims_documents_deletefolder(currentfolder, documents_id, documentsfolder_id)
{
	dims_xmlhttprequest_todiv('admin-light.php','dims_op=documents_deletefolder&currentfolder='+currentfolder+'&documentsfolder_id='+documentsfolder_id,'','dimsdocuments_'+documents_id);
}

function dims_documents_browser(currentfolder, documents_id)
{
	dims_xmlhttprequest_todiv('admin-light.php','dims_op=documents_browser&currentfolder='+currentfolder,'','dimsdocuments_'+documents_id);
}

function dims_documents_validate(form)
{
	if (dims_validatefield('Fichier',form.documentsfile_file,"string"))
	if (dims_validatefield('Libellé',form.documentsfile_label,"string"))
	return true;
	
	return false;
}

function autofitIframe(){
    try {
		if (document.getElementById || !window.opera && !document.mimeType && document.all && document.getElementById) {
			hauteur = this.document.body.scrollHeight + 40;
			if (hauteur<650) hauteur=650;
			parent.document.getElementById('wce_frame_editor').style.height=hauteur+"px";
		}
	}
	catch (e) {
		hauteur =this.document.body.offsetHeight + 40;
		if (hauteur<650) hauteur=650;
		parent.document.getElementById('wce_frame_editor').style.height=hauteur+"px";
	}
}

function addElement(parentId, elementTag, elementId, html,xdeb,ydeb,xfin,yfin) {
    // Adds an element to the document
    var p = document.getElementById(parentId);
    
    var newElement = document.createElement(elementTag);
    newElement.setAttribute('id', elementId);
    
    var width=Math.abs(xfin-xdeb);
    var height=Math.abs(yfin-ydeb);
    
    if (width==0) width=1;
    if ( height==0) height=1;
    
    // definition de la taille du canvas
    if (width!=null) newElement.setAttribute('width', width);
    if (height!=null) newElement.setAttribute('height',height);
    
    //Calcul du plus petit top et left, pour largeur et hauteur : valeur absolue
    if (xfin<xdeb) {
    	minx=xfin;
    	xfin=0;
    	xdeb=width;
    }
    else {
    	minx=xdeb;
    	xdeb=0;
    	xfin=width;
    }
    
    if (yfin<ydeb) {
    	miny=yfin;
    	yfin=0;
    	ydeb=height;
    }
    else {
    	miny=ydeb;
    	ydeb=0;
    	yfin=height;
    }
      
	newElement.style.left=minx+'px';
	newElement.style.top=miny+'px';
	newElement.style.position='absolute';
	p.appendChild(newElement);

	if(!window.innerWidth) {
		newElement=G_vmlCanvasManager.initElement(newElement);
	}

	p.appendChild(newElement);
	newElement.innerHTML = html;

	if (elementTag=="canvas") draw(elementId,xdeb,ydeb,xfin,yfin,1);
}

function removeElement(elementId) {
// Removes an element from the document
var element = document.getElementById(elementId);
element.parentNode.removeChild(element);
}
	
function draw(elem,xdep,ydep,xfin,yfin,sens){
	if (sens==null) sens=0;
		
	var canvas = document.getElementById(elem);
	if (canvas.getContext){
			
	  	var ctx = canvas.getContext('2d');
	  	ctx.save();
	  	ctx.lineWidth = 1;
		ctx.strokeStyle = '#BCBCBC';
	  	ctx.beginPath();
	  	ctx.moveTo(xdep,ydep);
	  	
	  	// si sens = 0 => horizontal sinon vertical
	  	if (sens==0) {
	  		dist=(xfin-xdep)*1/3;
			ctx.bezierCurveTo(dist,ydep,xfin-(dist/2),yfin,xfin,yfin);
		}
		else {
			dist=(yfin-ydep)*1;
			ctx.bezierCurveTo(xdep,dist,xfin,yfin-(dist/2),xfin,yfin);
		}
		ctx.stroke();
		ctx.restore();
	}	
}

