YAHOO.mirchee.uisynth.CombinedGraphWidget = function() {

    var graphData;
        
    function getGraphQuery(currentField, graphParams, query) {
        var concatFieldValue = '';
        for (i in graphParams) {
            var fieldName = i;                                
            var fieldValues = graphParams[i];
            concatFieldValue += fieldName + "=";
            if (fieldValues != null && fieldValues.length > 0) {
                for (var idx = 0; idx < fieldValues.length; idx++) {
                    concatFieldValue += fieldValues[idx];
                    if (idx < (fieldValues.length-1)) {
                        concatFieldValue += '#;#';
                    }
                }
            }
            if (fieldName == currentField) {
                concatFieldValue += '#;#' + query;
            }
            concatFieldValue += "&";
        }
        if (!graphParams[currentField]) {
            concatFieldValue += currentField + '=' + query;
        }
        return concatFieldValue;
    }    
    
    function hideLinks(elRoot) {
        e = Dom.getElementsByClassName('graph-links', 'div', elRoot);
        for (var i = 0; i < e.length; i++) {
            Dom.addClass(e[i], 'hidden');
        }
    }
    
    function hidePrevNext(elRoot) {
        e = Dom.getElementsByClassName('prev', 'img', elRoot);
        for (var i = 0; i < e.length; i++) {
            Dom.addClass(e[i], 'hidden');
        }
        e = Dom.getElementsByClassName('next', 'img', elRoot);
        for (var i = 0; i < e.length; i++) {
            Dom.addClass(e[i], 'hidden');
        }
    }
    function showShim(elRoot) {
        var e = Dom.getElementsByClassName('combo-graph', 'div', elRoot);
        for (var i = 0; i < e.length; i++) {
            e[i].style.height = '250px';
            e[i].style.backgroundImage = 'none';
        }
        var e = Dom.getElementsByClassName('graph-shim', 'div', elRoot);
        for (var i = 0; i < e.length; i++) {
            Dom.removeClass(e[i], 'hidden');
        }
        e = Dom.getElementsByClassName('graph-links', 'div', elRoot);
        for (var i = 0; i < e.length; i++) {
            Dom.addClass(e[i], 'hidden');
        }            
    }
    
    function hideShim(elRoot) {
        Dom.get(elRoot).style.height = 'auto';
        Dom.get(elRoot).style.backgroundImage = 'none';
        var e = Dom.getElementsByClassName('graph-shim', 'div', elRoot);
        for (var i = 0; i < e.length; i++) {
            Dom.addClass(e[i], 'hidden');
        }
        e = Dom.getElementsByClassName('graph-links', 'div', elRoot);
        for (var i = 0; i < e.length; i++) {
            Dom.removeClass(e[i], 'hidden');
        }
    }
    
    return {
        setGraphData : function(gd) {
            graphData = gd;
        },
        
        init : function() {
            graphData = arguments[2];
        },
        drawAllCharts : function() {
            for (var i = 0; i < graphData.length; i++) {
                var g = graphData[i];
                if (g.field === 'source' || g.field === 'author') {
                    var valuesForSource = g.graphparams[g.field];
                    if (!YAHOO.lang.isUndefined(valuesForSource) && valuesForSource.length > 0) {
                        Dom.get(g.graphContainerId).appendChild(Dom.get(g.field));
                        Dom.removeClass(Dom.get(g.field), 'hidden');
                        hideShim("g_" + (i+1));
                        hideLinks("g_" + (i+1));
                        hidePrevNext("g_" + (i+1));
                        continue;
                    }
                }
                var startIndex = 0;
                YAHOO.mirchee.uisynth.CombinedGraphWidget.drawChart(i, startIndex);
                var id = "prev_" + graphData[i].graphkey;
                YAHOO.util.Event.addListener(id, "click", function(e, idx) {
                   YAHOO.mirchee.uisynth.CombinedGraphWidget.prevSetOfData(idx);
                }, i);
                id = "next_" + graphData[i].graphkey;
                YAHOO.util.Event.addListener(id, "click", function(e, idx) {
                   YAHOO.mirchee.uisynth.CombinedGraphWidget.nextSetOfData(idx);
                }, i);        
                hideShim("g_" + (i+1));
            }
        },
        
        nextSetOfData : function(whichGraph) {
            var g = graphData[whichGraph];
            var currentStartIndex = g.startIndex;
            if (YAHOO.lang.isUndefined(currentStartIndex)) {
                currentStartIndex = 0;
            } else {
                currentStartIndex = currentStartIndex + 5;
            }
            g.startIndex = currentStartIndex;
            showShim("g_" + (whichGraph+1));
            YAHOO.mirchee.uisynth.CombinedGraphWidget.drawChart(whichGraph, currentStartIndex);
            hideShim("g_" + (whichGraph+1));
        },
        
        prevSetOfData : function(whichGraph) {
            var g = graphData[whichGraph];
            var currentStartIndex = g.startIndex;
            if (YAHOO.lang.isUndefined(currentStartIndex)) {
                currentStartIndex = 0;
            } else {
                if (currentStartIndex == 0) {
                    return;
                }
                currentStartIndex = currentStartIndex - 5;
                if (currentStartIndex < 0) {
                    currentStartIndex = 0;
                }
            }
            g.startIndex = currentStartIndex;
            showShim("g_" + (whichGraph+1));
            YAHOO.mirchee.uisynth.CombinedGraphWidget.drawChart(whichGraph, currentStartIndex);
            hideShim("g_" + (whichGraph+1));
        },
        
        drawChart : function(whichGraph, startIndex) {
            var g = graphData[whichGraph];
            g.startIndex = startIndex;
            var data = new google.visualization.DataTable();
            data.addColumn('string', g.col1);
            data.addColumn('number', g.col2);
            data.addColumn('string', "Link");
            
            for (i in g.graphdata) {
                var clusterdata = g.graphdata[i];
                var len = clusterdata.length;
                if (startIndex > len) {
                    return;
                }
                var numToShow = 5;
                numToShow = ((startIndex + numToShow) >clusterdata.length)?(clusterdata.length - startIndex):numToShow;
                //len = (clusterdata.length >= 5)?5:clusterdata.length
                //data.addRows(len);
                //for (var j = startIndex; j < clusterdata.length; j++) {
                data.addRows(numToShow);
                var count = 0;
                for (var j = startIndex; j < (startIndex + numToShow); j++) {
                    var moddisplayval = clusterdata[j].value;
                    var modval = clusterdata[j].value;
                    if (g.field == 'source') {
                        if (moddisplayval.indexOf('http://') != -1) {
                            moddisplayval = moddisplayval.substring(7);
                        }
                        modval = moddisplayval;
                        if (moddisplayval.indexOf('www.') != -1) {
                            moddisplayval = moddisplayval.substring(4);
                        } 
                        if (moddisplayval.indexOf("/") != -1) {
                            moddisplayval = moddisplayval.substring(0, modval.indexOf("/")); 
                        }
                        if (moddisplayval.indexOf('.com') != -1) {
                            moddisplayval = moddisplayval.substring(0, moddisplayval.indexOf(".com"));
                        }
                    }
                    data.setValue(count, 0, moddisplayval);                                
                    data.setValue(count, 1, clusterdata[j].count);
                    var concatFieldValue = getGraphQuery(g.field, g.graphparams, modval);                                    
                    data.setValue(count, 2, '/a/searchresults.do/queryString-' + encodeURIComponent(modval) + '/sort-createDate' + '/refineByDays-false' + '/ndays-' + g.days + '/f1-' + encodeURIComponent(concatFieldValue));
                    //if (j == 4) {
                        //break;
                    //}
                    count++;
                }
            }
            var c = new google.visualization.ColumnChart(document.getElementById(g.graphContainerId));
            c.draw(data, {
                          fontSize: 11,
                          width: g.width, 
                          height: 250,
                          isStacked:true,
                          fontName:"Calibri",
                          colors:[g.color], 
                          legend:'none',
                          chartArea: {
                              width:"80%"
                          },
                          vAxis: {
                              minValue:0,
                              textPosition:"out"
                          },
                          
                          hAxis:{
                              showTextEvery:1
                          }});
            var tc = new TermCloud(Dom.get(g.graphLinksContainerId));
            tc.draw(data, {target:'_self'});
        }
    }
}(); 
     
