/*-------------------------------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?op=update&aj=1&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;
        }
    }
}

function controlinputsize(maxlength,inputid,lenmonitorid)
{
    if(lenmonitorid == "" || lenmonitorid == undefined)
    {
       lenmonitorid = 0;
    }

    var inputelm    = document.getElementById(inputid);
    var curentlen   = inputelm.value.length;
    var remainlen   = (maxlength - curentlen) + 1;

    if(remainlen > 0)
    {
        remainlen = remainlen - 1;
    }
    else
    {
        remainlen = 0;
        inputelm.value = inputelm.value.substr(0,maxlength);
    }

    if(lenmonitorid)
    {
        document.getElementById(lenmonitorid).value = remainlen;
    }
}

/*------------------------------ 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 = "<img src='" + systemroot + "images/ajax-loader.gif' border='0' />";
var ajaxwaitelm  = '';

var langAjaxConnectionError = '';

function bilddatafromform(frm)
{
    var newdata = '';

    /* check if there is some code in onsubmit event */
    if(frm.onsubmit)
    {
        frm.onsubmit();
    }

    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)
        {
            if(document.getElementById(ajaxwaitelm))
            {
                document.getElementById(ajaxwaitelm).innerHTML = '';
            }
            else if(document.getElementById(ajaxdeselm))
            {
                document.getElementById(ajaxdeselm).innerHTML = '';
            }

            txet = xmlHttp.responseText;
            ajaxfunction(txet);
        }
        else
        {
            if(langAjaxConnectionError)
            {
                alert(langAjaxConnectionError);
            }

            document.getElementById(ajaxdeselm).innerHTML = "";
        }

        runajax();
        ajaxsrcelm   = '';
        ajaxreceived = 1;
        ajaxwaitelm  = '';
    }
    else
    {
        if(document.getElementById(ajaxwaitelm))
        {
            document.getElementById(ajaxwaitelm).innerHTML = ajaxwaitdata;
        }
        else if(document.getElementById(ajaxdeselm))
        {
            document.getElementById(ajaxdeselm).innerHTML = ajaxwaitdata;
        }
    }
}

function defaultreceivedata(data)
{
    var deselm = document.getElementById(ajaxdeselm);

    deselm.innerHTML = data;

    try
    {
        deselm.focus();
    }
    catch(e)
    {
    }
}

function pagesajax(link,des)
{
    ajaxwaitelm = 'pages_ajax_wait_elm';
    return ajax(link.href,link,des);
}
/*--------------------------------- suggest values ---------------------------*/

var suggestTimeout;
var suggestDelay        = 100;
var suggestResultValue  = new Array();
var suggestResultCount  = 0;
var suggestResultElmId  = 'search_suggest';
var suggestCurrentElm   = null;
var suggestCallBackFun  = null;

var suggestResultMax    = 0;
var suggestResultCurrent = 0;

function suggestDisableEnterKey(evn)
{
    if(evn.keyCode == 13)
    {
        return false;
    }
}


function selectSuggestResult(suggestId)
{
    currentId = suggestResultCurrent != 0 ? suggestResultCurrent : 0;

    if(currentId)
    {
        document.getElementById('suggestResult_'+currentId).style.backgroundColor = "";
    }

    document.getElementById('suggestResult_'+suggestId).style.backgroundColor = "#eee";
    suggestResultCurrent = suggestId;
}

function moveToSuggestResult(keyId)
{
    currentId = suggestResultCurrent != 0 ? suggestResultCurrent : 0;

    var addTo = keyId == 40 ? 1 : -1;
    var nextId = currentId+addTo;

    nextId = nextId > suggestResultMax ? 1 : nextId;
    nextId = nextId <= 0 ? suggestResultMax : nextId;

    if(currentId)
    {
        document.getElementById('suggestResult_'+currentId).style.backgroundColor = "";
    }

    if(document.getElementById('suggestResult_'+nextId))
    {
        var nextElm = document.getElementById('suggestResult_'+nextId);
        nextElm.style.backgroundColor = "#eee";
        setSuggestValue(nextElm.innerHTML.replace(/(<([^>]+)>)/ig,""));
        suggestResultCurrent = nextId;
    }
}


function clearSuggestElm()
{
    suggestResultElm = document.getElementById(suggestResultElmId);
    suggestResultElm.innerHTML = "";
    suggestResultElm.style.display = "none";
    suggestResultMax = 0;
    suggestResultCurrent = 0;
}

function getSuggestTimeout(evn,op,query,fun)
{
    var KeyID = evn.keyCode;
    //alert(KeyID);

    if(fun != undefined || fun != "")
    {
        suggestCallBackFun = fun;
    }
    else
    {
        suggestCallBackFun = null;
    }

    if(suggestResultMax && KeyID == 13)
    {
        if(suggestResultCurrent)
        {
            if(document.getElementById('suggestResult_'+suggestResultCurrent))
            {
                cElm = document.getElementById('suggestResult_'+suggestResultCurrent);
                cElm.onclick();
                //returnSuggestValue(cElm.innerHTML.replace(/(<([^>]+)>)/ig,""));
                /*
                textAndId = cElm.innerHTML.match(/returnSuggestValue\(\'(.*?)\',\'(.*?)\'\)/ig);
                textAndId = textAndId[0].replace(/returnSuggestValue\(\'(.*?)\',\'(.*?)\'\)/ig,"$1---$2");
                textAndId = textAndId.split("---");
                returnSuggestValue(textAndId[0],textAndId[1]);
                */
            }
        }

        return false;
    }
    else if(suggestResultMax && (KeyID == 40 || KeyID == 38))
    {
        moveToSuggestResult(KeyID);
    }
    else
    {
        window.clearTimeout(suggestTimeout);
        suggestTimeout = window.setTimeout("getSuggest('"+op+"','"+query+"');",suggestDelay);
    }
}

function getSuggest(op,query)
{
    if(query.length > 0)
    {
        suggestResultMax = 0;
        suggestResultCurrent = 0;

        var sendajax = 1;

        for(key in suggestResultValue)
        {
            if(suggestResultValue[key][0] == query)
            {
                //if(suggestResultValue[key][1] != "")
                {
                    sendajax = 0;
                    suggestResultElm = document.getElementById(suggestResultElmId);
                    suggestResultElm.style.display = "block";
                    suggestResultElm.innerHTML = suggestResultValue[key][1];
                    suggestResultMax = suggestResultValue[key][2];
                    break;
                }
            }
        }

        if(sendajax)
        {
            var data = "query=" + query;
            var link = location.pathname + "?op=" + op;
            var srcelm = document.getElementById(suggestResultElmId);

            suggestResultValue[suggestResultCount]      = new Array();
            suggestResultValue[suggestResultCount][0]   = query;
            suggestResultValue[suggestResultCount][1]   = '';
            suggestResultValue[suggestResultCount][2]   = 0;

            ajax(link,'',suggestResultElmId,suggestResult,'post',data);
        }
    }
    else
    {
        clearSuggestElm();
    }
}

function suggestResult(data)
{
    if(data)
    {
        data = processSuggestResult(data);

        suggestResultElm = document.getElementById(suggestResultElmId);
        suggestResultElm.style.display = "block";
        suggestResultElm.innerHTML = data;

        suggestResultValue[suggestResultCount][1] = data;
        suggestResultValue[suggestResultCount][2] = suggestResultMax;
        suggestResultCount++;
    }
    else
    {
        clearSuggestElm();
    }
}

function processSuggestResult(data)
{
    var dataArray = data.split("***");
    var rData     = '';

    for(r in dataArray)
    {
        suggestResultMax++;

        if(dataArray[r].indexOf("---") != -1)
        {
            fieldData = dataArray[r].split("---");
            fieldText = fieldData[1];
            fieldId   = fieldData[0];
        }
        else
        {
            fieldText = dataArray[r];
            fieldId   = dataArray[r];
        }

        rData = rData + '<div id="suggestResult_'+suggestResultMax+'" onclick="returnSuggestValue(\''+fieldText+'\',\''+fieldId+'\')" onmouseover="selectSuggestResult('+suggestResultMax+')">'+fieldText+'</div>\n';
    }

    return rData;
}


function setSuggestValue(valText)
{
    suggestCurrentElm.value = valText;
    suggestCurrentElm.select();
}

function returnSuggestValue(valText,valId)
{
    if(suggestCurrentElm != null)
    {
        setSuggestValue(valText);

        if(suggestCallBackFun != null)
        {
            suggestCallBackFun(valText,valId);
        }
    }

    clearSuggestElm();
}


function changeSuggestElm(elm)
{
    if(elm == undefined || elm == ''){elm = null;}
    suggestCurrentElm = elm;
}


/*------------------------------ 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;
}

function nl2br(str)
{
    return str.replace(/\n/ig, "<br>");
}

function br2nl(str)
{
    return str.replace(/(<br \/>|<br>)/ig, "\n");
}
