function CheckLength(str) {
    var maxword = 20;
    str = str.replace(/[\[\]\/\,\.\-\\:\?#=&;!\(\)"']/ig,' ');
    str = str.replace(/<br\s*\/?>/ig,' ');
    str = str.replace(/(<([^>]+)>)/ig,"");
    var words = str.split(/\s/);
    for(var i=0; i<words.length; i++) {
        if (words[i].length > maxword && words[i].match('https?://') === null) {
            return true;
        }
    }
    return false;
}

function countChars(objTxt, objCnt, size) {
    var cnt = document.getElementById(objCnt)
    var txt = document.getElementById(objTxt)

    if (size-txt.value.length < 0) {
        txt.value = txt.value.substring(0, size)
    }

    cnt.innerHTML = size-txt.value.length
}

function trim(str) {
    str = str.replace(/^\s*/,"");
    str = str.replace(/\s*$/,"");

    return str;
}

// mestene na opciite ot ediniq select v drugiq
function transferSelected(fromId,toId,sortBy,max) {
    var selFrom=document.getElementById(fromId);	// 'msgSelectFrom'
    var selTo=document.getElementById(toId);	// 'msgSelectTo'

    if (selFrom.options.length>0) {
        for (var i = 0; i < selFrom.options.length; i++) {
            if (selFrom.options[i].selected) {
                if (selTo.length >= max && max != undefined && max != '' && max != 0 && max != -1) {
                    return;
                }
                selTo.options[selTo.length]=new Option(selFrom.options[i].text,selFrom.options[i].value);
                selFrom.options[i]=null;
                // tyj kato se prehvyrlq 1 element, sledva6tiqt zaema negoviq index
                // za tova broq4a se namalq s edno, za da ne se propuskat elementi
                i--;
            }
        }
        if (sortBy.length > 0)	{
            sortSelect(selTo, sortBy);
        }
    }
}

// -------------------------------------------------------------------
// sortSelect(select_object)
//   Pass this function a SELECT object and the options will be sorted
//   by their text (display) values
// -------------------------------------------------------------------
function sortSelect(obj, sortBy) {
    var o = new Array();
    if (!hasOptions(obj)) { return; }
    for (var i=0; i<obj.options.length; i++) {
        o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected) ;
    }
    if (o.length==0) { return; }

    switch (sortBy) {
        case 'text':
            o = o.sort(
                function(a,b) {
                    if ((a.text+"") < (b.text+"")) { return -1; }
                    if ((a.text+"") > (b.text+"")) { return 1; }
                    return 0;
                }
            );
            break;
        case 'value':
            o = o.sort(
                function(a,b) {
                    if ((a.value+"") < (b.value+"")) { return -1; }
                    if ((a.value+"") > (b.value+"")) { return 1; }
                    return 0;
                }
            );
            break;
        case 'valueAsInt':
            o = o.sort(
                function(a,b) {
                    if (parseInt(a.value) < parseInt(b.value)) { return -1; }
                    if (parseInt(a.value) > parseInt(b.value)) { return 1; }
                    return 0;
                }
            );
            break;
    }

    for (var i=0; i<o.length; i++) {
        obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
    }
}

// -------------------------------------------------------------------
// hasOptions(obj)
//  Utility function to determine if a select object has an options array
// -------------------------------------------------------------------
function hasOptions(obj) {
    if (obj!=null && obj.options!=null) { return true; }
    return false;
}

function checkAll(id,checkName,link) {
    var mainCheckbox=document.getElementById(id);    // 'mainCheck'
    var els=document.getElementsByTagName('input');
    if (mainCheckbox.checked) {
        var check=true;
    } else {
        var check=false;
    }
    if (link) {
        check = !check;
        mainCheckbox.checked = check;
    }
    // mainCheckbox.checked = !check;
    for (var i=0;i<els.length;i++) {
        if (els[i].getAttribute('type')=='checkbox' && els[i].getAttribute('name').indexOf(checkName)==0) {
            if (els[i].id!=id) {
                els[i].checked=check;
            }
        }
    }
}

// palnene na hidden pole sas izbranite ot select opcii
function getMultiSelect(selectId,hiddenId) {
    var sel=document.getElementById(selectId);
    if (sel.options.length>0) {
        var selectedUsers='';
        for (var i = 0; i < sel.options.length; i++) {
            selectedUsers+=sel.options[i].value+'|';
        }
        document.getElementById(hiddenId).value=selectedUsers;
        return true;
    } else {
        // ne se pozvolqva submit ako nqma izbrani polu4ateli
        return false;
    }
}

// palnene na hidden pole sas izbranite ot select opcii
function getMultiSelectSum(selectId,hiddenId) {
    var sel=document.getElementById(selectId);
    if (sel.options.length>0) {
        var selectedUsers=0;
        for (var i = 0; i < sel.options.length; i++) {
            selectedUsers+=parseInt(sel.options[i].value);
        }
        document.getElementById(hiddenId).value=selectedUsers;
        return true;
    } else {
        // ne se pozvolqva submit ako nqma izbrani polu4ateli
        return false;
    }
}

/* 	NOTE: na funkciqta se podavat kato parametri id-tata na poletata
*	funkciqta proverqva dali saotvetnite input poleta sa prazni ako
*	ima dori edno prazno vra6ta false. Prepora4itelna upotreba:
*	<form action="" method="" onsubmit="return checkFilled('id1','id2'...)">
*	kadeto id1,id2 sa poletata za proverka
*/
function checkFilled() {
    for (var i=0;i<arguments.length;i++) {
        if (document.getElementById(arguments[i]).value=='' || document.getElementById(arguments[i]).value==undefined) {
            alert(formEmpty);
            return false;
        }
    }
    return true;
}

function isJPG(id) {
    result = true;
    obj = document.getElementById(id);

    if (obj.value.length > 0 && obj.value.toLowerCase().indexOf("jpg") < 0) {
        result = false;
    }

    return result;
}

var maxStars = 5;
var starWidth = 15;
function getStarsWidth(obj, e) {
    var coords = findPos(obj);
    var stars = Math.ceil((e.clientX-coords[0])/starWidth);
    var starsWidth = stars*starWidth;
    if (starsWidth > starWidth*maxStars) {
        starsWidth = starWidth;
    }

    return starsWidth;
}

function clearStars() {
    document.getElementById('rateStars').style.width = '0px';
}

function rate(e, obj) {
    var starsWitdh = getStarsWidth(obj, e);
    document.getElementById('rateStars').style.width = starsWitdh+'px';
}

function findPos(obj) {
    var curtop = 0;
    var curleft = 0;
    if (obj.offsetParent) {
        curleft = obj.offsetLeft;
        curtop = obj.offsetTop;
        while (obj = obj.offsetParent) {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        }
    }
    return [curleft,curtop];
}

function vote(e, obj, type, id) {
    document.getElementById('rateStars1').onclick='';
    var stars = getStarsWidth(obj, e)/starWidth;

    request = getXmlHttpRequestObject();

    var url=serverPath+"vote.php?type="+type+"&id="+id+"&stars="+stars;

    request.onreadystatechange=voteStateChanged;
    request.open("GET",url,true);
    request.setRequestHeader("Accept-Language", "bg, en");
    request.setRequestHeader("Accept-Charset", "utf8");
    request.send(null);

}

function voteStateChanged() {
    // request=getXmlHttpRequestObject();
    if (request.readyState==4 || request.readyState=="complete") {
        // debug(request.responseText);
        xml = request.responseXML;
        var arr=getTagsAsArray(xml);

        document.getElementById('rateStars1').onmouseover = '';
        document.getElementById('rateStars1').onmousemove = '';

        document.getElementById('rateStars2').style.width = Math.round(arr[0]['avg']*starWidth)+'px';
        document.getElementById('rateStars').style.width = '0px';
        document.getElementById('votes').innerHTML = arr[0]['votes'];

        // if (arr[0]['type'] == 'profile') {
            // document.getElementById('rating').innerHTML = Math.round(arr[0]['avg']*100)/100;
        // }

        if (arr[0]['votes'] == 1) {
            document.getElementById('votesText').innerHTML = '&nbsp;'+votesSingle;
        } else {
            document.getElementById('votesText').innerHTML = '&nbsp;'+votes;
        }

        document.getElementById('voteMessage1').style.display = 'none';
        document.getElementById('voteMessage2').style.display = '';
    }
}

function flvLoad(path, videofile, filesize, video_autoplay, videosize, thumb) {
    var color='cr=0&amp;cg=0&amp;cb=0';
    // var con='<embed src="'+path+'FlashPlayer/video.swf" quality="high" bgcolor="#FFFFFF" width="480" height="390" name="video" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="file='+videofile+'&amp;filesize='+filesize+'&amp;video_autoplay='+video_autoplay+'&amp;videosize='+videosize+'&amp;thumb='+thumb+'&amp;'+color+'" />';
    // var con='<embed src="'+path+'FlashPlayer/video.swf?php_adress='+serverPath+'flvprovider.php&file='+videofile+'&amp;filesize='+filesize+'&amp;video_autoplay='+video_autoplay+'&amp;videosize='+videosize+'&amp;thumb='+thumb+'&amp;'+color+'" quality="high" bgcolor="#FFFFFF" wmode="transparent" width="480" height="390" name="video" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />';
    var con='<embed src="'+path+'FlashPlayer/video.swf?php_adress='+imgServerPath+'flvprovider.php&file='+videofile+'&amp;filesize='+filesize+'&amp;video_autoplay='+video_autoplay+'&amp;videosize='+videosize+'&amp;thumb='+thumb+'&amp;'+color+'" quality="high" bgcolor="#FFFFFF" wmode="transparent" width="480" height="390" name="video" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />';
    document.getElementById('flashcontent').innerHTML=con;

}

function hidePhoto(id) {
    document.getElementById(id).style.display = 'none';
}
function showPhoto(id,src,e) {
    document.getElementById(id).firstChild.src = src;
    document.getElementById(id).style.display = '';
    var mouse = getMouse(e);
    document.getElementById(id).style.top = mouse[1]+'px';
    document.getElementById(id).style.left = mouse[0]+'px';
}

function getMouse(e) {
    var posx = 0;
    var posy = 0;
    if (!e) 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
            + document.documentElement.scrollLeft;
        posy = e.clientY + document.body.scrollTop
            + document.documentElement.scrollTop;
    }
    // posx and posy contain the mouse position relative to the document
    // Do something with this information
    return [posx,posy];
}

function resizeImage(srcWidth,srcHeight,newWidth,newHeight) {
    var ratioWidth = srcWidth/newWidth;

    var ratioHeight = srcHeight/newHeight;

    if( ratioWidth < ratioHeight) {
        destWidth = srcWidth/ratioHeight;
        destHeight = newHeight;
    } else {
        destWidth = newWidth;
        destHeight = srcHeight/ratioWidth;
    }
    return [destWidth,destHeight];
}

function restrictImageSize(newWidth,newHeight) {
    if (newWidth == null || newWidth == 'undefined') {
        newWidth = 580;
    }
    if (newHeight == null || newHeight == 'undefined') {
        newHeight = 580;
    }
    var els = document.getElementsByTagName('img');
    var newSizes;
    var width;
    var height;
    for (var i = 0;i< els.length;i++) {
        width = els[i].width;
        height = els[i].height;

        var src = els[i].src

        if (width > newWidth && src.indexOf('ads/') == -1 && src.indexOf('easytrader.bg/') == -1 && src.indexOf('elmaz.ro/') == -1) {
            newSizes = resizeImage(width,height,newWidth,newHeight);
            els[i].width = newSizes[0];
            els[i].height = newSizes[1];
        }
    }
}

// ([а-яА-Я] ?)+


function replyDialog() {
    if (document.getElementById('btn_pressed').value == 'move' || document.getElementById('btn_pressed').value == 'deleteMsg') {
        return;
    }
    var msg = document.getElementById('msgText').value;
    var toAid = document.getElementById('toAid').value;
    var thread_id = document.getElementById('thread_id').value;

    if (CheckLength(msg)) {
        alert(fieldPost+alertTooLong);
        return false;
    }

    msg = msg.replace(/&/ig,'%26');

    var vars = 'msg='+msg+'&toAid='+toAid+'&thread_id='+thread_id;

    replyMsg=getXmlHttpRequestObject();
    var url = "postReplyMessage.php";
    replyMsg.onreadystatechange=replyDialogStateChanged;
    replyMsg.open("POST",url,true);
    replyMsg.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=utf8');
    replyMsg.setRequestHeader("Accept-Language", "bg, en");
    replyMsg.setRequestHeader("Accept-Charset", "utf8");
    replyMsg.send(vars);

    return false;
}
function replyDialogStateChanged() {
    if (replyMsg.readyState == 4 || replyMsg.readyState == "complete") {
        // alert(replyMsg.responseText);
        document.getElementById('msgText').value = '';
        if (replyMsg.responseText.indexOf('errorLine') == -1) {
            document.getElementById('successMsgReply').style.display = '';
            setTimeout('document.getElementById("successMsgReply").style.display = "none"',5000);
        }

        var newDiv = document.createElement('div');
        newDiv.innerHTML = replyMsg.responseText;
        newDiv.className = 'msgDialogHolder';
        var target = document.getElementById('successMsgReply');
        if (dialogDirection == 'asc') {
            target.parentNode.insertBefore(newDiv, target);
        } else {
            insertAfter(newDiv,target);
        }
        unpreviewMsg();
    }
}
function insertAfter(newElement,targetElement) {
    //target is what you want it to go after. Look for this elements parent.
    var parent = targetElement.parentNode;
    //if the parents lastchild is the targetElement...
    if(parent.lastchild == targetElement) {
        //add the newElement after the target element.
        parent.appendChild(newElement);
    } else {
        // else the target has siblings, insert the new element between the target and it's next sibling.
        parent.insertBefore(newElement, targetElement.nextSibling);
    }
}


function previewMsg() {
    var comment = document.getElementById('msgText').value;

    // emoticons && bbcode parsing
    comment = displayEmoticons(comment);

    var pattern = {'\\[b\\]':'<b>','\\[\\/b\\]':'<\/b>','\\[u\\]':'<u>','\\[\\/u\\]':'<\/u>','\\[i\\]':'<i>',
        '\\[\\/i\\]':'<\/i>','\\[left\\]':'<div class="left">','\\[\\/left\\]':'<\/div>','\\[right\\]':'<div class="right">','\\[\\/right\\]':'<\/div>',
        '\\[center\\]':'<div class="center">','\\[\\/center\\]':'<\/div>','\\[img\\]':'<img src="','\\[\\/img\\]':'" \/>',
        '\\[url(=([^\\]]*))?\\]':'<a href="$2" target="_blank">','\\[\\/url\\]':'<\/a>',
        '\\[quote(=([^\\]]*))?\\]':'<div class="quote"><div class="quoteHeader">$2</div><div style="clear:both">','\\[\\/quote\\]':'<\/div><\/div>',
        '\\[email(=([^\\]]*))?\\]':'<a href="mailto:$2">','\\[\\/email\\]':'<\/a>',
        '\\[color(=([^\\]]*))?\\]':'<span style="color:$2;">','\\[\\/color\\]':'<\/span>',

        '\\[size(=([^\\]]*))?\\]':'<span style="font-size:$2;">','\\[\\/size\\]':'<\/span>'
    };

    comment = bbcodeparser(comment, pattern);

    comment = nl2br(comment);

    document.getElementById('previewMsg').innerHTML = comment;

    document.getElementById('postReply1').style.display = 'none';
    document.getElementById('postReply2').style.display = 'none';
    document.getElementById('previewHolder').style.display = '';

    document.getElementById('preview').style.display = 'none';
    document.getElementById('editMsg').style.display = '';
}
function unpreviewMsg() {
    document.getElementById('postReply1').style.display = '';
    document.getElementById('postReply2').style.display = '';
    document.getElementById('previewHolder').style.display = 'none';

    document.getElementById('preview').style.display = '';
    document.getElementById('editMsg').style.display = 'none';
}


var requestMsgDir;
function saveDefaultMsgDirection(dir) {
    requestMsgDir=getXmlHttpRequestObject();
    var url = "saveDefaultMsgDirection.php?dir="+dir;
    requestMsgDir.onreadystatechange=defaultMsgDirectionStateChanged;
    requestMsgDir.open("GET",url,true);
    requestMsgDir.setRequestHeader("Accept-Language", "bg, en");
    requestMsgDir.setRequestHeader("Accept-Charset", "utf8");
    requestMsgDir.send(null);

    return false;
}
function defaultMsgDirectionStateChanged() {
}
