var store;
var treeModel;
var treeOne;
var selectedGroupName = "";
var selectedGroupId = 0;
var selectedArtId = 0;
var selectedArtDescr = "";
var addToQuoteButton;
var addToQuoteForm;
var startQuoteButton;
var startQuoteForm;
var quote;
var quoteControls;
var quoteInviteAdd;
var quoteRemarkText;
var quoteRemarkEdit;
var quoteSubmitForm;
var quoteSubmitButton;
var quoteRemarkButton;
var quoteDeleteButton;
var remarkSubmitForm;
var remarkEditText;
var remarkSubmitButton;
//var gridContainer;
var welcomeText;
var searchBox;
var searchBoxTitle;
var searchProduct;
var resultDiv;
var artTblStore;
var artGrid = null;
var quoteStore;
var lastSearchedText="QQQ-NNNnn8-QQQ";

dojo.config.parseOnLoad = true;
dojo.config.locale ='nl-be';
dojo.config.dojoBlankHtmlUrl = '/blank.html';

dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dijit.Tree");
dojo.require("dojox.grid.DataGrid");
dojo.require("dojo.parser");
dojo.require("dijit.form.TextBox");

dojo.addOnLoad(initElements);
//google.setOnLoadCallback(initElements);

//google.setOnLoadCallback(loader);

function resetQuoteStore(){
    if (quoteBusy){
        // Get current quote of logged in user...
        quoteStore = new dojo.data.ItemFileReadStore({
            url: 'quoteman.php?l=1'
        });
        quoteInviteAdd.style.display= ("none");
    } else {
        quoteStore = new dojo.data.ItemFileReadStore({
            data: {
                "identifier": "row_id",
                "label": "omschr",
                "items":[]
            }
        });
        quoteInviteAdd.style.display= "block";
    }

}

function resetRemark(){
    if (quoteBusy){
        // Get current quote remark of logged in user...
        dojo.xhrGet({
            url: 'quoteman.php?t=1',
            handleAs: "json",
            load: function(data,args){
                quoteRemarkText.innerHTML = data;
                quoteRemarkText.style.display = "block";
                remarkEditText.value = data;
                quoteRemarkEdit.style.display = "none";
            }
        });
    } else {
        quoteRemarkText.innerHTML = "";
        quoteRemarkText.style.display = "none";
        remarkEditText.value = "";
        quoteRemarkEdit.style.display = "none";
    }

}

function initElements(){
    quote=dojo.byId("quote");
    quoteControls = dojo.byId("quotecontrols");
    quoteInviteAdd = dojo.byId("quoteinviteadd");
    quoteRemarkText = dojo.byId("quoteremarktext");
    quoteRemarkEdit = dojo.byId("quoteremarkedit");
    remarkEditText = dojo.byId("remarkedittext");
    welcomeText = dojo.byId("WelcomeText");
    searchProduct = dojo.byId("searchproduct");
    searchBox = dojo.byId("SearchBox");
    searchBoxTitle = dojo.byId("SearchBoxTitle");
    searchText = dojo.byId("searchtext")
    resultDiv = dojo.byId("ResultDiv");
    //    gridContainer = dojo.byId("Artikeltabel");

    store = new dojo.data.ItemFileReadStore({
        url: "InetCatTree.php"
    });

    store.fetch(); // PRE-fetch, which fails in google cache or google translate (security error : dojo does not load data from another site), so that in that case the original, static html-content, is not overwritten by javascript.

    treeModel = new dijit.tree.ForestStoreModel({
        store: store,
        query: {
            "type": "firstlevel"
        },
        rootId: "0",
        rootLabel: "Groepen",
        childrenAttrs: ["children"]

    });

    treeOne = new dijit.Tree({
        model:treeModel ,
        showRoot:false,
        openOnClick:true ,
        persist:false ,
        onClick:function(item){
            var groupId = store.getIdentity(item);
            var groupName = store.getLabel(item);
            selectedGroupName = groupName;
            selectedGroupId = groupId;
            updateTextAndFigure("p", groupId);
        //            pageTracker._trackEvent(selectedGroupName+"_"+selectedGroupId, "Group");
        }
    }, "treeDiv");

    // set the remark
    resetRemark();

    // set the layout structure:
    var quoteTblLayout = [
    {
        field: 'qty',
        name: 'Aantal',
        width: '30px',
        editable:'true'
    },

    {
        field: 'omschr',
        name: 'Omschr.',
        width: '200px'
    }
    ];

    resetQuoteStore();

    // create a new grid:
    quoteGrid = new dojox.grid.DataGrid({
        store: quoteStore,
        loadingMessage: 'De gegevens worden opgehaald.',
        rowSelector: '0px',
        errorMessage:"Er is een fout opgetreden. Gelieve op de knop 'Vernieuwen' te klikken in uw browser.",
        onFetchError : function(err, req){
        //            alert(err);
        },
        onRowClick : function(e){
            var quoteRowId = quoteStore.getIdentity(e.grid.getItem(e.rowIndex));
            var artName = quoteStore.getLabel(e.grid.getItem(e.rowIndex));
            if (confirm("Wil u artikel "+artName+" van de offerte verwijderen ?")){
                removeFromQuote(quoteRowId);
            }
        },
        structure: quoteTblLayout
    },    "quoteGridDiv");

    // Call startup, in order to render the grid:
    quoteGrid.startup();

    addToQuoteButton = dojo.byId('addtoquotebutton');
    // disable form posting when js used
    addToQuoteForm = dojo.byId('addtoquoteform');
    addToQuoteForm.onsubmit = function() {
        return false;
    }
    dojo.connect(addToQuoteButton, 'onclick', 'addToQuote');

    quoteSubmitButton = dojo.byId('quotesubmitbutton');
    // disable form posting when js used
    quoteSubmitForm = dojo.byId('quotesubmitform');
    quoteSubmitForm.onsubmit = function() {
        return false;
    }
    dojo.connect(quoteSubmitButton, 'onclick', 'submitQuote');

    quoteRemarkButton = dojo.byId('quoteremarkbutton');
    dojo.connect(quoteRemarkButton, 'onclick', 'remarkQuote');

    quoteDeleteButton = dojo.byId('quotedeletebutton');
    dojo.connect(quoteDeleteButton, 'onclick', 'deleteQuote');

    remarkSubmitButton = dojo.byId('remarksubmitbutton');
    // disable form posting when js used
    remarkSubmitForm = dojo.byId('remarksubmitform');
    remarkSubmitForm.onsubmit = function() {
        return false;
    }
    dojo.connect(remarkSubmitButton, 'onclick', 'submitRemark');

    startQuoteButton = dojo.byId('startquotebutton');
    // disable form posting when js used
    startQuoteForm = dojo.byId('startquote');
    startQuoteForm.onsubmit = function() {
        return false;
    }
    dojo.connect(startQuoteButton, 'onclick', 'startQuote');

    searchButton = dojo.byId('searchbutton');
    // disable form posting when js used
    searchSubmitForm = dojo.byId('searchsubmitform');
    searchSubmitForm.onsubmit = function() {
        return false;
    }
    dojo.connect(searchButton, 'onclick', 'searchCatalog');
    dojo.connect(searchText, 'onkeypress', function(e) {
        if (e.keyCode == dojo.keys.ENTER) {
            searchCatalog();
        }
    });
    searchText.focus();
    searchText.select();

    initCallback();
}

function loader(){

}

function deleteQuote(){
    if (confirm('Wil u deze VOLLEDIGE offerte-aanvraag vernietigen ? ')){
        dojo.xhrGet({
            url: "quoteman.php?k=1",
            handleAs: "json",
            load: function(data,args){
                if (data==false){
                    alert("Er is een fout opgetreden bij het verwijderen van uw offerte.");
                } else if (data.error=="false"){
                    quoteControls.style.display="none";
                    quoteBusy = 0;
                    addToQuoteForm.style.display="none";
                    try {
                        pageTracker._trackPageview("/quote/deleted");
                    } catch(err) {

                    }
                    resetQuoteStore();
                    resetRemark();
                    quoteGrid.setStore(quoteStore);
                } else {
                    alert("Er is een fout opgetreden bij het verwijderen : "+data.message);
                }

            },
            // if any error occurs, it goes here:
            error: function(error,args){
                console.warn("Fout opgetreden bij het verwijderen van uw offerte.",error);
            }
        });
    }

}

function remarkQuote(){
    quoteRemarkText.style.display = "none";
    quoteRemarkEdit.style.display = "block";
    dojo.byId("quoteGridDiv").style.display = "none";
    quoteControls.style.display = "none";
}

function submitRemark(){
    dojo.xhrGet({
        url: 'quoteman.php?u='+ remarkEditText.value.replace(new RegExp("&lt;","g"), "<").replace(new RegExp("&gt;","g"), ">"),
        handleAs: "json",
        load: function(data,args){
            quoteRemarkText.innerHTML = data;
            quoteRemarkText.style.display = "block";
            remarkEditText.value = data;
            quoteRemarkEdit.style.display = "none";
            dojo.byId("quoteGridDiv").style.display = "block";
            quoteControls.style.display = "block";
        }
    });
}

function searchCatalog(){
    if (searchText.value == lastSearchedText){
        return; // Avoid double submit on "enter" in search field for firefox.
    }
    if (dojo.trim(searchText.value) == ""){
        return; // On "enter" in the drop-down list of previous search words, firefox fires this with an empty search field.
    }
    lastSearchedText = searchText.value;
    dojo.xhrGet({
        url: 'SearchSrv.php?s='+ lastSearchedText,
        handleAs: "json",
        load: function(items,request){
            if (items.length==0){
                resultDiv.innerHTML="Er zijn geen resultaten gevonden voor deze zoekterm(en) ...";
            } else {
                var resultHtml="";
                for (i=0; i<items.length;i++){

                    resultHtml = resultHtml + "<p><b><a href=\"#\" onclick=\"selectFromSearch("+items[i].identifier+")\">"+items[i].grouptitle+ " - " +items[i].title+"</a></b><br/>"+items[i].descr+"</p>";
                }
                if (items.length==300){
                    resultHtml = resultHtml + "<p style=\"color:red\">Er worden maximaal 300 resultaten weergegeven. Gelieve meer specifieke zoektermen te gebruiken.</p>";
                }
                resultDiv.innerHTML=resultHtml;
            }
            // First register search (even though ill advised to put tracking code before the end.
            try {
                pageTracker._trackPageview("/SiteSearch/?SearchTerm="+lastSearchedText);
            } catch(err) {
            }
            if (items.length==1){
                selectFromSearch(items[0].identifier);
            }
            searchText.focus();
            searchText.select();
        }
    });

}

function selectFromSearch(artNr){
    welcomeText.style.display="none";
    //    searchBox.setAttribute("class", "ucbox");
    dojo.attr(searchBox, "class", "ucbox");
    searchBoxTitle.style.display="block";
    resultDiv.style.height="150px";
    updateTextAndFigure("a",artNr);
}

function submitQuote(){
    if (confirm('Wil u deze offerte-aanvraag opsturen ? Controleer uw postnummer, ondernemingsnummer en adresgegevens, omdat uw aanvraag enkel afgehandeld kan worden als ze correct zijn. U kan ze nog verbeteren in het menu \"mijn gegevens\" als u hier annuleren klikt.')){

        dojo.xhrGet({
            url: "quoteman.php?s=1",
            handleAs: "json",
            load: function(data,args){
                if (data==false){
                    alert("Er is een fout opgetreden bij het versturen van uw offerte.");
                } else if (data.error=="false"){
                    quoteControls.style.display="none";
                    quoteBusy = 0;
                    addToQuoteForm.style.display="none";
                    try {
                        pageTracker._trackPageview("/quote/submitted");
                    //
                    //                        pageTracker._addTrans(
                    //                            "1234",                                     // Order ID
                    //                            "Mountain View",                            // Affiliation
                    //                            "18.28",                                    // Total
                    //                            "1.29",                                     // Tax
                    //                            "5",                                        // Shipping
                    //                            "San Jose",                                 // City
                    //                            "California",                               // State
                    //                            "USA"                                       // Country
                    //                            );
                    //
                    //
                    //                        pageTracker._addItem(
                    //                            "1234",                                     // Order ID
                    //                            "DD44",                                     // SKU
                    //                            "T-Shirt",                                  // Product Name
                    //                            "Green Medium",                             // Category
                    //                            "11.99",                                    // Price
                    //                            "1"                                         // Quantity
                    //                            );
                    //                        pageTracker._trackTrans();

                    } catch(err) {}
                    resetQuoteStore();
                    resetRemark();
                    quoteGrid.setStore(quoteStore);


                    alert(data.message);
                } else {
                    alert("Er is een fout opgetreden bij het versturen : "+data.message);
                }

            },
            // if any error occurs, it goes here:
            error: function(error,args){
                console.warn("Fout opgetreden bij het versturen van uw offerte.",error);
            }
        });
    }
}


function startQuote(){
    dojo.xhrGet({
        url: 'quoteman.php?i=1',
        handleAs: "json",
        load: function(data,args){
            if (data==false){
                alert("Er is een fout opgetreden bij het versturen van de gegevens.");
            } else if (data.error=="true"){
                alert(data.message);
            } else {
                quoteControls.style.display="block";
                quoteBusy = data.quoteid;
                startQuoteForm.style.display="none";
                if (selectedArtId != 0){
                    addToQuoteForm.style.display="block";
                    // And immediately add this product, qty should be changed later by user :
                    quoteStore = new dojo.data.ItemFileReadStore({
                        url: 'quoteman.php?a='+selectedArtId+'&q=1'

                    });
                    quoteInviteAdd.style.display= ("none");

                } else {
                    resetQuoteStore();
                    resetRemark();
                }
                quoteGrid.setStore(quoteStore);
                pageTracker._trackPageview("/quote/start");
            }

        },
        // if any error occurs, it goes here:
        error: function(error,args){
            console.warn("Fout opgetreden bij het versturen van de gegevens.",error);
        }
    });

}

function addToQuote(){
    //    var qty = prompt("Aantal voor "+selectedArtDescr, "1.00");
    var quoteQty=dojo.byId("quoteqty");
    qty = parseFloat(quoteQty.value.replace(',','.'));
    quoteQty.value = "1";
    quoteQty.focus();
    quoteQty.select();
    if (isNaN(qty))
    {
        alert("Ongeldig getal.");
    }
    else
    {
        quoteStore = new dojo.data.ItemFileReadStore({
            url: 'quoteman.php?a='+selectedArtId+'&q='+qty

        });
        quoteGrid.setStore(quoteStore);
        quoteInviteAdd.style.display= ("none");

    }

}


function removeFromQuote(rowId){
    quoteStore = new dojo.data.ItemFileReadStore({
        url: 'quoteman.php?r='+rowId
    });
    quoteGrid.setStore(quoteStore);
}

function CreateTableThumb(str){
    if ((str != null) && !(str == "")){
        // SPECIFY THE ITEM'S HEIGHT or the table height will be INCORRECT if the images are not cached yet !
        return "<div style=\"position:relative;line-height:35px;height:35px;background:#F0F0F0;text-align:center;\"><img style=\"vertical-align:middle\" src=\""+str+"\" ></div>";
    } else {
        return "<div style=\"position:relative;line-height:35px;height:35px;background:#F0F0F0;text-align:center;\"></div>";
    }
}

function CreateArtDescr(rowIndex,item){
    if (item != null){
        return  item.omschr + "---+---" + item.art_nr;
    } else {
        return "";
    }
}

function ArtDescrFormat(str){
    return str.replace("---+---"," <span style=\"font-size:xx-small\">(<span style=\"color:blue; text-decoration:underline\">")+"</span>)</span>";
}

function updateArtTbl(id){
    //    dojo.byId("Artikeltabel").style.display="block";
    dojo.byId("ArtWindow").style.display="block"; // You cannot create a grid in a display=none <div>, see dojo documentation
    welcomeText.style.display="none";
    searchBox.style.display="none";
    searchProduct.innerHTML="<span  style=\"color:red\">&rarr;</span>&nbsp;<b><a href=\"Catalog.php\">Zoek product</a></b>";
    artTblStore = new dojo.data.ItemFileReadStore({
        url: 'InetArtTbl.php?p='+id

    });
    if (artGrid == null){
        // set the layout structure:
        var artTblLayout = [
        {
            field: 'img',
            name: 'Figuur',
            width: '35px',
            formatter: CreateTableThumb
        },
        {
            field: 'omschr',
            name: 'Artikel',
            width: '230px',
            get:CreateArtDescr,
            formatter:ArtDescrFormat
        }
        ];



        // create a new grid:
        artGrid = new dojox.grid.DataGrid({
            store: artTblStore,
            clientSort: true,
            loadingMessage: 'De gegevens worden opgehaald.',
            rowSelector: '0px',
            structure: artTblLayout,
            errorMessage:"Er is een fout opgetreden. Gelieve op de knop 'Vernieuwen' te klikken in uw browser.",
            onFetchError : function(err, req){
            // alert(err);
            },
            onRowClick : function(e){
                var artId = artTblStore.getIdentity(e.grid.getItem(e.rowIndex));
                var artName = artTblStore.getLabel(e.grid.getItem(e.rowIndex));
                updateTextAndFigure("a", artId);
            //try {
            //    pageTracker._trackEvent(selectedGroupName+"_"+selectedGroupId, "Art", artName);
            //} catch (err){}
            }
        }, "Artikeltabel");
        artGrid.startup();
    } else {
        artGrid.setStore(artTblStore);
    }
}

function showFig(url){
    if (url == ""){
        dojo.byId("figDiv").innerHTML="";
    } else {
        dojo.byId("figDiv").innerHTML="<img src=\""+url+"\">";
    }
}

function selectThumb(index){
    var thumbDiv = dojo.byId("thumbs");
    for (i in thumbDiv.childNodes){        
        // property 'length' seems to be the last childNode ...
        var node = thumbDiv.childNodes[i];
        if (node.tagName == "IMG"){
            node.style.borderStyle="none";
        }
    }
    thumbDiv.childNodes[index].style.borderStyle="solid";
}

function updateTextAndFigure(type, id){
    if (type=='p'){
        updateArtTbl(id);
    }
    var descriptionNode = dojo.byId("descriptionDiv");
    var titleNode = dojo.byId("titleDiv");
    dojo.xhrGet({
        url: "InetArtText.php?"+(type=='p'?"p":"a")+"="+id,
        handleAs: "json",
        load: function(data,args){
            if (data.toString()=="false"){
                descriptionNode.innerHTML = "Geen gegevens."
                titleNode.innerHTML = "";
                addToQuoteForm.style.display="none";
                startQuoteForm.style.display="none";
                selectedArtId = 0;
            }else {
                titleNode.innerHTML = "<h2 class=\"ucproducttitle\">" + data.title + "</h2>";
                type = data.newType; // InetArtText may decide to return text for a specific product even when a product group was requested.
                id = data.newId;
                descriptionNode.innerHTML = data.descr + (type=='p'?"<p class=\"ucremark\"><blink>&larr;</blink> Klik op een artikel...</p>":"");
                if (type=='a'){
                    selectedArtId=id;
                    selectedArtDescr = data.title;
                    addToQuoteForm.style.display=(quoteBusy!=0 ? "block" : "none");
                    startQuoteForm.style.display=(quoteBusy==0 ? "block" : "none");
                    if (quoteBusy){
                        var quoteQty = dojo.byId("quoteqty");
                        quoteQty.focus();
                        quoteQty.select();
                    }
                } else {
                    selectedArtId = 0;
                    selectedArtDescr = "";
                    addToQuoteForm.style.display="none";
                    startQuoteForm.style.display="none";
                }
                try {
                    pageTracker._trackPageview((type=='p'?"pg/":"art/")+data.title.replace(/ /g,"_")+"_"+id);
                } catch(err){
                }
            }

        },
        // if any error occurs, it goes here:
        error: function(error,args){
            console.warn("error!",error);
        }
    });
    var imageItemStore = new dojo.data.ItemFileReadStore({
        url: 'InetImages.php?nopfora=1&'+(type=="p"?"p":"a")+"="+id
    });
    var pdfItemStore = new dojo.data.ItemFileReadStore({
        url: 'InetPdfs.php?nopfora=1&'+(type=="p"?"p":"a")+"="+id
    });
    var request= {
        count:20,
        start:0
    };
    var itemNameMap = {
        imageLargeAttr: "large"
    };
    imageItemStore.fetch({
        onComplete: function(items, request){
            if (items.length==0){
                //                dojo.style('slideshow1','visibility','hidden');
                dojo.byId("imageInfo").innerHTML = (type=="p"?"":"");
                dojo.byId("thumbs").innerHTML="";
                dojo.byId("thumbs").style.display="none";
                showFig("");
            } else {
                var thumbsHtml="";
                for (imgid=0; imgid<items.length;imgid++){
                    // When just replacing innerHtml, and calling selectThumb(0) afterwards, DOM has not been updated yet, and errors result.
                    // So we select thumb 0 here before.
                    thumbsHtml = thumbsHtml + "<img "+(imgid==0 ? "style=\"border-style:solid\"":"")+"class=\"thumbimg\" src=\""+items[imgid].thumb+"\" onclick=\"selectThumb("+imgid+"); showFig('"+items[imgid].large+"')\">";
                }
                if (imgid > 1){
                    dojo.byId("thumbs").innerHTML=thumbsHtml;
                    dojo.byId("thumbs").style.display="block";
                } else {
                    dojo.byId("thumbs").innerHTML="";
                    dojo.byId("thumbs").style.display="none";
                }
                showFig(items[0].large);

                dojo.byId("imageInfo").innerHTML = "";
            }
        }
    });
    pdfItemStore.fetch({
        onComplete: function(items, request){
            if (items.length==0){
                dojo.byId("pdfInfo").innerHTML ="";
                dojo.byId("pdfFront").innerHTML="";
                dojo.byId("pdfFront").style.display="none";
            } else {
                var pdfHtml="";
                for (pdfid=0; pdfid<items.length;pdfid++){
                    pdfHtml = pdfHtml
                    + "<a href=\""+items[pdfid].pdf+"\" target=\"_blank\">"
                    + "<img style=\"border: 1px solid black;\" class=\"thumbimg\" src=\""+items[pdfid].thumb+"\">"
                    + "</a>";
                }
                
                dojo.byId("pdfInfo").innerHTML = "<h4>documenten :</h4>";
                dojo.byId("pdfFront").innerHTML=pdfHtml;
                dojo.byId("pdfFront").style.display="block";
            }
        }
    });

}





