/*-------------------------------general function ----------------------------*/
function wraptextarea(action,textareaid)
{
    var tarea = document.getElementById(textareaid);

    if(action){tarea.wrap='soft';}else{tarea.wrap='off';}
}

function copyelmcontent(id)
{
}


function updateimagecode(imgid)
{
    var hd = new Date();

    document.getElementById(imgid).src = systemroot + 'image.php?aj=1&op=update&hash=' + hd.getTime() + '' + hd.getMilliseconds();
    return false;
}

function hideshow(id)
{
    if(document.getElementById(id).style.display != "none")
    {
        document.getElementById(id).style.display = "none";
    }
    else
    {
        document.getElementById(id).style.display = "block";
    }
}

function checkuncheckall(box,thefrm)
{
    var checked = (box.checked ? true : false);

    for(i=0; i<thefrm.elements.length; i++)
    {
        if(thefrm.elements[i].type=="checkbox" && thefrm.elements[i].name==box.name)
        {
            thefrm.elements[i].checked = checked;
        }
    }
}

/*------------------------------ ajax functions ------------------------------*/

function GetXmlHttp()
{
    var xmlHttp=null;

    try
    {
        // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
    }
    catch(e)
    {
        // Internet Explorer
        try
        {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e)
        {
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
    }

    if (xmlHttp==null)
    {
        alert ("Your browser does not support AJAX!");
        return;
    }

    return xmlHttp;
}


var ajaxsrcelm;
var ajaxdeselm;
var ajaxrunning  = 0;
var ajaxtimeout  = 10000;
var ajaxlasturl  = "";
var ajaxreceived = 0;
var ajaxfunction;
//var ajaxwaitdata = "<p align='center'><img src='images/ajax-loader.gif' /></p>";
var ajaxwaitdata = "<img src='" + systemroot + "images/ajax-loader.gif' border='0' />";
var ajaxwaitelm  = '';


function bilddatafromform(frm)
{
    var newdata = '';

    for(i = 0 ; i <= frm.length - 1 ; i++)
    {
        var type = frm.elements[i].type;
        var value = frm.elements[i].value;

        if(frm.elements[i].name != "" && frm.elements[i].disabled == false)
        {
            value = value.replace(/&/g, escape("&"));
            value = value.replace(/=/g, escape("="));
            value = value.replace(/\+/g, encodeURIComponent("+"));

            switch(type)
            {
                case "radio":
                {
                    if(frm.elements[i].checked == true)
                    {
                        newdata = newdata + '&' + frm.elements[i].name + '=' + value;
                    }
                }

                case "checkbox":
                {
                    if(frm.elements[i].checked == true)
                    {
                        newdata = newdata + '&' + frm.elements[i].name + '=' + value;
                    }

                    break;
                }

                default:
                {
                    newdata = newdata + '&' + frm.elements[i].name + '=' + value;
                }
            }
        }
    }

    return newdata;
}


function stopajax()
{
    ajaxrunning = 1;

    try
    {
        ajaxsrcelm.disabled  = true;
    }
    catch(e)
    {
        //alert(e);
    }
}

function runajax()
{
    ajaxrunning = 0;

    try
    {
        if(ajaxreceived == 0)
        {
            ajaxsrcelm.disabled  = false;
        }
    }
    catch(e)
    {
        //alert(e);
    }
}


function ajax(link,srcelm,deselm,fun,method,data,frm)
{
    if(ajaxrunning == 0)
    {
        ajaxreceived = 0;

        xmlHttp = GetXmlHttp();

        if(fun == "def" || fun == undefined || fun == '')
        {
	        ajaxfunction = defaultreceivedata;
        }
        else
        {
    	    ajaxfunction = fun;
        }

        if(deselm == "def" || deselm == undefined)
        {
	        ajaxdeselm   = "ajaxpart";
        }
        else
        {
	        ajaxdeselm   = deselm;
        }

        ajaxlasturl  = link;
        ajaxsrcelm   = srcelm;

        stopajax();

        xmlHttp.onreadystatechange=statechange;

        if(link.indexOf('aj=1') == -1)
        {
            link = (!link.indexOf('?') == -1 ? link + '?aj=1' : link + '&aj=1' );
        }

        if(method == "" || method == "GET" || method == undefined)
        {
            xmlHttp.open("GET",link,true);
            xmlHttp.send(null);
        }
        else
        {
            data = ( (frm != undefined) ? bilddatafromform(frm) : data);

            xmlHttp.open("POST",link,true);
            xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xmlHttp.setRequestHeader("Content-length", data.length);
            xmlHttp.setRequestHeader("Connection", "close");
            xmlHttp.send(data); 

        }

        window.setTimeout("runajax();", ajaxtimeout);
    }

    return false;
}

function statechange()
{
    if (xmlHttp.readyState==4)
    {
        if(xmlHttp.status == 200)
        {
            txet = xmlHttp.responseText;
            ajaxfunction(txet);
        }
        else
        {
            document.getElementById(ajaxdeselm).innerHTML = "Connecting error, please try again";
        }

        runajax();
        ajaxsrcelm   = '';
        ajaxreceived = 1;
    }
    else
    {
        if(document.getElementById(ajaxwaitelm))
        {
            document.getElementById(ajaxwaitelm).innerHTML = ajaxwaitdata;
        }
        else if(document.getElementById(ajaxdeselm))
        {
            document.getElementById(ajaxdeselm).innerHTML = ajaxwaitdata;
        }
    }
}

function defaultreceivedata(data)
{
    document.getElementById(ajaxdeselm).innerHTML = data;
}

/*------------------------------ find text in element ------------------------*/

var userAgent = navigator.userAgent.toLowerCase();
var is_opera  = (userAgent.indexOf('opera') != -1);
var is_saf    = ((userAgent.indexOf('applewebkit') != -1) || (navigator.vendor == 'Apple Computer, Inc.'));
var is_webtv  = (userAgent.indexOf('webtv') != -1);
var is_ie     = ((userAgent.indexOf('msie') != -1) && (!is_opera) && (!is_saf) && (!is_webtv));
var is_ie4    = ((is_ie) && (userAgent.indexOf('msie 4.') != -1));
var is_moz    = ((navigator.product == 'Gecko') && (!is_saf));
var is_kon    = (userAgent.indexOf('konqueror') != -1);
var is_ns     = ((userAgent.indexOf('compatible') == -1) && (userAgent.indexOf('mozilla') != -1) && (!is_opera) && (!is_webtv) && (!is_saf));
var is_ns4    = ((is_ns) && (parseInt(navigator.appVersion) == 4));
var is_mac    = (userAgent.indexOf('mac') != -1);


var startpos = 0;
var n        = 0;
var laststr  = "";

function find_text(str,textarea_id,next)
{
	var txt, i, found;

	if(laststr != str || next == 0)
	{
		startpos = 0;
		n = 0;
		laststr = str;
	}

	if (str == '')
	{
		return false;
	}

	if (is_moz)
	{
		txt = document.getElementById(textarea_id).value;
		if (!startpos || startpos + str.length >= txt.length)
		{
			startpos = 0;
		}
		var x = 0;
		var matchfound = false;
		for (i = startpos; i < txt.length; i++)
		{
			if (txt.charAt(i) == str.charAt(x))
			{
				x++;
			}
			else
			{
				x = 0;
			}
			if (x == str.length)
			{
				i++;
				startpos = i;
				document.getElementById(textarea_id).focus();
				document.getElementById(textarea_id).setSelectionRange(i - str.length, i);
				// really dirty nasty thing, hide from Kier
				moz_txtarea_scroll(document.getElementById(textarea_id), i);
				matchfound = true;
				break;
			}
			if (i == txt.length - 1 && startpos > 0)
			{ // argh at end
				i = 0;
				startpos = 0;
			}
		}
		if (!matchfound)
		{
			alert('Not found.');
		}
	}

	if (is_ie)
	{
		txt = document.getElementById(textarea_id).createTextRange();
		for (i = 0; i <= n && (found = txt.findText(str)) != false; i++)
		{
			txt.moveStart('character', 1);
			txt.moveEnd('textedit');
		}
		if (found)
		{
			txt.moveStart('character', -1);
			txt.findText(str);
			txt.select();
			txt.scrollIntoView(true);
			n++;
		}
		else
		{
			if (n > 0)
			{
				n = 0;
				find_text(str,textarea_id);
			}
			else { alert('Not found.'); }
		}
	}

	return false;
}



function moz_txtarea_scroll(input, txtpos)
{
	var newarea = input.cloneNode(true);
	newarea.setAttribute('id', 'moo');
	newarea.value = input.value.substr(0, txtpos);
	document.body.appendChild(newarea);
	if (newarea.scrollHeight <= input.scrollTop || newarea.scrollHeight >= input.scrollTop + input.offsetHeight)
	{
		if (newarea.scrollHeight == newarea.clientHeight)
		{
			input.scrollTop = 0;
		}
		else
		{
			input.scrollTop = newarea.scrollHeight - 40;
		}
	}
	document.body.removeChild(document.getElementById('moo'));
}


/*----------------------------------------------------------------------------*/

function in_array(needle, haystack, argStrict)
{
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: vlado houba
    // *     example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: true
    // *     example 2: in_array('vlado', {0: 'Kevin', vlado: 'van', 1: 'Zonneveld'});
    // *     returns 2: false
    // *     example 3: in_array(1, ['1', '2', '3']);
    // *     returns 3: true
    // *     example 3: in_array(1, ['1', '2', '3'], false);
    // *     returns 3: true
    // *     example 4: in_array(1, ['1', '2', '3'], true);
    // *     returns 4: false

    var key = '', strict = !!argStrict;

    if (strict) {
        for (key in haystack) {
            if (haystack[key] === needle) {
                return true;
            }
        }
    } else {
        for (key in haystack) {
            if (haystack[key] == needle) {
                return true;
            }
        }
    }

    return false;
}
