//общие фции для скриптов

//превращает квери стринг в объект
function parseQueryString(str)
{
    if (str==undefined) return;
    
    if (str=='') return;
    if (str.charAt(0)=='?') str=str.substr(1);
    var ar=str.split('&');
    var obj = new Object();
    var i;
    for (i=0;i<ar.length;i++)
    {
        nameValuePair=ar[i].split('=');
        obj[nameValuePair[0]]=unescape(nameValuePair[1]);
    }    
    return obj;
}

//возвращает querystring в виде объекта
function QueryString()
{
    return parseQueryString(window.location.search);

}

//массив строк вида queryString
function parseQueryStringArray(str)
{
    if (str==undefined) return;
    var result=new Array();
    var j;
    var ar=str.split('&');
    for (j=0;j<ar.length;j++)
    {
        result.push(parseQueryString(unescape(ar[j])));
    
    }
    return result;
}




//user-friendly вариант извлечения xml атрибутов
function getXmlAttributeByName(xmlElement,attName)
{
    var i;
    if (xmlElement.attributes.length==0) return '';
    for(i=0;i<xmlElement.attributes.length;i++)
    {
        if (xmlElement.attributes[i].name==attName)
            return xmlElement.attributes[i].value;
    }
    return '';
}





//это тоже из микрософт. Переименовываем, чтобы не было конфликтов.

function AppendToClassName(element, className) {
    var current = element.className;
    if (current) {
        if (current.charAt(current.length - 1) != ' ') {
            current += ' ';
        }
        current += className;
    }
    else {
        current = className;
    }
    element.className = current;
}





function RemoveClassName(element, className) {
    var current = element.className;
    if (current) {
        //если в конце
        if (current.substring(current.length - className.length - 1, current.length) == ' ' + className) {
            element.className = current.substring(0, current.length - className.length - 1);
            return;
        }
        //если только этот класс
        if (current == className) {
            element.className = "";
            return;
        }
       
        
        var index = current.indexOf(' ' + className + ' ');
        if (index != -1) {
            element.className = current.substring(0, index) + current.substring(index + className.length + 2, current.length);
            return;
        }
        //если в начале
        if (current.substring(0, className.length+1) == className + ' ') {
            element.className = current.substring(className.length + 1, current.length);
        }
    }
}





//возвращает value или innerHTML в зависимости от tagName
function GetValue(id)
{
    var obj=document.getElementById(id);
    if (obj==null) return;
    
    return GetObjValue(obj);
    

}


function GetObjValue(obj)
{
    if (obj.tagName=='INPUT') return obj.value;
    if (obj.tagName=='SELECT') return obj.options[obj.selectedIndex].value;
    
    return obj.innerHTML;
    
}

function SetValue(id,value)
{
    var obj=document.getElementById(id);
    if (obj==null) return;
    SetObjValue(obj,value);
   

}



function SetObjValue(obj,value)
{
    if (obj==null) return;
    if (value=='') return;
    if (value==undefined) return;
    if (obj.tagName=='INPUT' ) 
        obj.value=value;
    else if (obj.tagName=='SELECT')
        {
            var k;
            for (k=0;k<obj.options.length;k++)
            {
            
                if (obj.options[k]!=null && obj.options[k].value==value)
                {
                    obj.selectedIndex=k;
                    return;
                }    
            
            }    
        
        }
    
    else
        obj.innerHTML=value;
    

}


function enable(id) 
{
    var obj=document.getElementById(id);
    if (obj==null) return;
    obj.disabled=false;
    
    var inputs =obj.getElementsByTagName('INPUT');
    for(i=0;i<inputs.length;i++)
    {
        inputs[i].disabled=false;
    }

    var selects =obj.getElementsByTagName('SELECT');
    for(i=0;i<selects.length;i++)
    {
        selects[i].disabled=false;
    }

}


//для дисэйбл нужно дисэблить также подчененные элементы, иначе они доступны для изменения
function disable(id) 
{
    var obj=document.getElementById(id);
    if (obj==null) return;
    obj.disabled=true;
    
    var inputs =obj.getElementsByTagName('INPUT');
    for(i=0;i<inputs.length;i++)
    {
        inputs[i].disabled=true;
    }

    var selects =obj.getElementsByTagName('SELECT');
    for(i=0;i<selects.length;i++)
    {
        selects[i].disabled=true;
    }

}


//прячет элемент, проверяя если он существует
function hideElement(id)
{

    var elm =document.getElementById(id);
    if (elm==null) return;
    elm.style.display='none';

}

//показывает элемент если он существует
function showElement(id)
{

    var elm =document.getElementById(id);
    if (elm==null) return;
    elm.style.display='';

}

//прячет строку таблицы если она существует
function hideTableRow(tableID,rowIndex)
{

    var table =document.getElementById(tableID);
    if (table==null) return;
    if (table.rows.length>rowIndex) table.rows[rowIndex].style.display='none';

}

//показывает строку таблицы если она существует
function showTableRow(tableID,rowIndex)
{

     var table =document.getElementById(tableID);
    if (table==null) return;
    if (table.rows.length>rowIndex) table.rows[rowIndex].style.display='';


}




//находим нужную колонку по названию колонки
//названия сейчас есть в хедере - так что можно не мучиться
function findColumnIndex(table,columnName)
{

 header=table.rows[0]
   
 
   //ищем ячейку с нужным именем
   for (i=0;i<header.cells.length;i++)
   {
        columnID=header.cells[i].id.substring(table.id.length+7);
        if (columnID== columnName) return i;
        
   }
   //not found
   return -1;
}





//возвращает числовое значение ячейки - или innerHtml или input
function getFloatCellValue(cell)
{

    input=cell.getElementsByTagName('INPUT');
    if (input.length==0)
        value= cell.innerText;
    else if (input[0].value!='')
        value=input[0].value;
    
        
        if(value.charAt(0)=='$') value=value.substring(1);
        return parseFloat(value);
 
}


function Trim(s) {
    var m = s.match(/^\s*(\S+(\s+\S+)*)\s*$/);
    return (m == null) ? "" : m[1];
}