﻿//JavaScript klasi String dodajemo funkciju za trim-ovanje String objekta
String.prototype.StringTrim = function()
{
    return this.replace(/^\s+|\s+$/g,"");
}
//JavaScript klasi String dodajemo funkciju za dekodovanje String objekta koji je enkodovan na serveru,
//za ovo koristimo decodeURI JavaScript funkciju kao polaznu osnovu
String.prototype.StringDecode = function()
{
    var str = decodeURI(this);
    return str.StringReplaceAll("\\+", " ").StringReplaceAll("%23", "#").StringReplaceAll("%24", "$").
        StringReplaceAll("%26", "&").StringReplaceAll("%2b", "+").StringReplaceAll("%2c", ",").
        StringReplaceAll("%2f", "/").StringReplaceAll("%3a", ":").StringReplaceAll("%3b", ";").
        StringReplaceAll("%3d", "=").StringReplaceAll("%3f", "?").StringReplaceAll("%40", "@");
}
//JavaScript klasi String dodajemo funkciju koja ispravlja replace funkciju koja vec postoji
//ali je losa jer replace-uje samo prvo pojavljivanje unutar String objekta
String.prototype.StringReplaceAll = function(oldString, newString)
{
    return this.replace(new RegExp(oldString, "g"), newString);
}
//JavaScript klasi String dodajemo funkciju za pretvaranje String objekta u Number objekat
String.prototype.StringToNumber = function()
{
    var str = this;
    
    //Da bi JavaScript parseFloat funkcija uspela moramo da uklonimo thousand separatore,
    //Da bi JavaScript parseInt i parseFloat funkcije uspele decimal separator mora da bude "."
    //jer ove funkcije radi samo za engleski Culture
    if (LanguageId == 3098)
    {
        str = str.replace(/\./g, "");
        str = str.replace(/,/g, ".");
    }
    else
    {
        str = str.replace(/,/g, "");
    }
    
    //Proveravamo da li je Number objekat integer tipa ili float tipa
    if (str.indexOf(".") == -1)
    {
        return parseInt(str);
    }
    else
    {
        return parseFloat(str);
    }
}




//JavaScript klasi Number dodajemo funkciju za pretvaranje Number objekta u String objekat
Number.prototype.NumberToString = function(numberOfDecimalDigits)
{
    var decimalSeparator = (LanguageId == 3098) ? "," : ".";
    var thousandSeparator = (LanguageId == 3098) ? "." : ",";
    
    var str = this.toFixed(numberOfDecimalDigits);
    if (LanguageId == 3098)
    {
        var helpSeparator = ";";
        str = str.replace(decimalSeparator, helpSeparator);
        str = str.replace(thousandSeparator, decimalSeparator);
        str = str.replace(helpSeparator, thousandSeparator);
    }
    
    var decimalSeparatorIndex = str.indexOf(decimalSeparator);
    var thousandSeparatorIndex = decimalSeparatorIndex - 3;
    while (thousandSeparatorIndex > 1)
    {
        str = str.substring(0, thousandSeparatorIndex) + thousandSeparator +
            str.substring(thousandSeparatorIndex);
        thousandSeparatorIndex = thousandSeparatorIndex - 3;
    }
    
    return str;
}




function UrlHasQueryString(url, key)
{
    if (url.indexOf("?" + key) != -1)
    {
        return true;
    }
    else if (url.indexOf("&" + key) != -1)
    {
        return true;
    }
    else
    {
        return false;
    }
}
function UrlAddQueryString(url, key, value)
{
    if (url.indexOf("?") == -1)
    {
        url = url + "?";
    }
    else
    {
        url = url + "&"
    }
    url = url + key + "=" + value;
    return url;
}
function UrlGetQueryString(url, key)
{
    if (UrlHasQueryString(url, key))
    {
        if (url.indexOf("?" + key) != -1)
        {
            var i = url.indexOf("?" + key);
            var j = url.indexOf("=", i);
            var k = url.indexOf("&", j);
            if (k == -1)
            {
                k = url.length;
            }
            var value = url.substring(j + 1, k);
        }
        else if (url.indexOf("&" + key) != -1)
        {
            var i = url.indexOf("&" + key);
            var j = url.indexOf("=", i);
            var k = url.indexOf("&", j);
            if (k == -1)
            {
                k = url.length;
            }
            var value = url.substring(j + 1, k);
        }
        return value;
    }
    else
    {
        return null;
    }
}
function UrlSetQueryString(url, key, newValue)
{
    if (UrlHasQueryString(url, key))
    {
        var oldValue = UrlGetQueryString(url, key);
        url = url.replace("?" + key + "=" + oldValue, "?" + key + "=" + newValue);
    }
    else
    {
        url = UrlAddQueryString(url, key, newValue);
    }
    return url;
}




function ImageSetOpacity(image, opacity)
{
    image.style.filter = "alpha(opacity=" + (opacity * 100) + ")";
    image.style.opacity = opacity;
}




//Ovu funkciju koristimo kada imamo dve povezane DropDownList-e koje nemaju veliki broj Option-a,
//pa onda mogu sve da ih ucitaju na stranu client-a,
//Kada imamo, na primer, Razvojne partnere i Razvojne agencije kod Dacu-a onda mozemo da koristimo ovu funkciju,
//a kada imamo organizacije i kontakt osobe onda mora resenje sa iframe-om jer je previse kontakt osoba u bazi
function SelectJoin(ddl1, ddl2, isOption2ForOption1, ddl2Refresh, ddl2Hide)
{
    //isOption2ForOption1 je funkcija koja odredjuje da li ddl2 option treba da se prikaze,
    //ova funkcija ima dva parametra: value od selektovanog ddl1 option-a i type attribute od ddl2 option-a,
    //po default-u ova funkcija vraca true ako su ova dva parametra jednaka
    if (typeof(isOption2ForOption1) == "undefined" || isOption2ForOption1 == null)
    {
        isOption2ForOption1 = SelectJoin_isOption2ForOption1;
    }
    
    //ddl2Refresh govori da li treba da se ddl2 selektovani option postavi na prvi option ("..." tj. "-- Svi --") kada korisnik izabere nesto iz ddl1
    //po default-u je true
    if (typeof(ddl2Refresh) == "undefined" || ddl2Refresh == null)
    {
        ddl2Refresh = true;
    }
    
    //ddl2Hide govori da li treba da se ddl2 prikaze ako ima samo jedan option ("..." tj. "-- Svi --"),
    //po default-u je false
    //Sakriva se zapravo parentNode od parentNode za sada (jer se select nalazi u td koji se nalazi u tr),
    //mozda bi trebalo ddl2Hide da bude broj koji ce da kaze koji parentNode se sakriva, recimo -1 znaci nema sakrivanja i to je default, 0 znaci sakriva se ddl2, 1 znaci sakriva se prvi parentNode itd.,
    //Poseban problem je kod 0 kada se sakriva ddl2 jer onda kod sb treba sakriti zapravo ElementGetPreviousElementSibling(ddl2) jer je to sb
    if (typeof(ddl2Hide) == "undefined" || ddl2Hide == null)
    {
        ddl2Hide = false;
    }
    
    var ddl2Options = new Array();
    for (var i = 0; i < ddl2.options.length; i++)
    {
        ddl2Options[i] = ddl2.options[i];
    }
    
    $(ddl1).bind("change", function(){
        SelectJoin_ddl1_Change(ddl1, ddl2, ddl2Options, isOption2ForOption1, ddl2Refresh, ddl2Hide);
    });
    SelectJoin_ddl1_Change(ddl1, ddl2, ddl2Options, isOption2ForOption1, false, ddl2Hide);
}
function SelectJoin_ddl1_Change(ddl1, ddl2, ddl2Options, isOption2ForOption1, ddl2Refresh, ddl2Hide)
{
    var ddl1Value = ddl1.getValue();
    
    if (ddl2Refresh)
    {
        ddl2.setSelectedIndex(0);
    }
    
    while (ddl2.options.length > 1)
    {
        ddl2.remove(1);
    }
    for (var i = 1; i < ddl2Options.length; i++)
    {
        var o = ddl2Options[i];
        if (isOption2ForOption1(ddl1Value, ddl2Options[i].getAttribute("type")))
        {
            ddl2.add(o);
        }
    }
    
//    if (typeof($(ddl2).sb) != "undefined")
//    {
//        $(ddl2).sb("refresh");
//    }
    
    if (ddl2Hide)
    {
        if (ddl2.options.length == 1)
        {
            ddl2.parentNode.parentNode.style.display = "none";
        }
        else
        {
            ddl2.parentNode.parentNode.style.display = "";
        }
    }
    
    //Izazivamo dogadjaj change od ddl2 za slucaj da je ona dalje kaskadno vezana na neki ddl3!!!!!!!!!!
    $(ddl2).trigger("change");
}
function SelectJoin_isOption2ForOption1(option1, option2)
{
    return (option2 == option1);
}

