/**
 * Функция разделяет строку на подстроки по разделителю
 *
 * @param  string   str        строка
 * @param  string   separator  разделитель
 * @return string[] массив подстрок
 */
function explode(str, separator)
{
    if(str == '' || str == null) return new Array();
    
    var index_next  = str.indexOf(separator);
    var ArrReturn   = new Array();
    
    if(index_next == -1)
    {
        return new Array(str);    
    }
    else
    {
        // первая подстрока, разделитель только справа
        ArrReturn[ArrReturn.length] = str.substring(0, index_next);
        index_prev  = index_next;
        
        // вторая - предпоследная подстрока, разделитель с обеих сторон
        while( (index_next = str.indexOf(separator, index_prev + separator.length)) > -1 )
        {
            ArrReturn[ArrReturn.length] = str.substring(index_prev + separator.length, index_next);
            index_prev  = index_next;
        }
        
        // последняя подстрока, разделитель только слева
        if(str.substring(index_prev + separator.length, str.length))
        {
            ArrReturn[ArrReturn.length] = str.substring(index_prev + separator.length, str.length);
        }
    }
    
    return ArrReturn;
}

/**
 * Функция собирает строку из массива подстрок, разделенных 
 *
 * @param  string[] ArrParts    массив строк
 * @param  string   separator   разделитель
 * @param  bool     add_empty   включить\исключить пустые строки
 * @return string   строка
 */
function implode(ArrParts, separator, add_empty)
{
    add_empty = add_empty != null ? add_empty : 0;
    
    var strReturn = '';

    // исключаем пустые строки
    if(!add_empty)
    {
        var ArrTemp   = new Array();
        for(var i=0; i<ArrParts.length; i++)
        {
            if(ArrParts[i] == null || ArrParts[i] == '') continue;
            
            ArrTemp[ArrTemp.length] = ArrParts[i];
        }
        ArrParts = ArrTemp;
    }
    
    // склеиваем строку
    for(var i=0; i<ArrParts.length; i++)
    {
        if(!add_empty && (ArrParts[i] == null || ArrParts[i] == '')) continue;
        
        strReturn += ( strReturn != '' ? separator : '') + ArrParts[i];
    }
    
    return strReturn;
}
