YAHOO.namespace('mirchee');
YAHOO.mirchee.graph = function() {
    return {
        allImagesResize : function() {
            YAHOO.mirchee.graph.imgResize(arguments[2].width, arguments[2].container); 
        },
        imgResize : function(newwidth, container, makeAsyncImagesVisible) {
            if (YAHOO.lang.isUndefined(makeAsyncImagesVisible)) {
                makeAsyncImagesVisible = true;
            }
            var elems = Dom.getElementsByClassName('mi_img_loading', 'img', container);
            var numElems = (elems != null)?elems.length:0;
            for (var i = 0; i < numElems; i++) {
                var elem = elems[i];
                elem.style.visibility = 'hidden';
                elem.style.display = 'none';
            }
            var elems = Dom.getElementsByClassName('mi_img', 'img', container);
            var numElems = (elems != null)?elems.length:0;
            for (var i = 0; i < numElems; i++) {
                var elem = elems[i];
                var h = elem.offsetHeight;                
                var w = elem.offsetWidth;
                //Figure out why sometimes height and width are coming as 0, 0
                if (h <= 0 || w <= 0) {
                    h = 10000;
                    w = 8000;
                }
                var newdim = newwidth;
                var neww = w;
                var newh = h;
                if (h < newdim && w < newdim) {
                    //do nothing
                } else {
                    if (w > h) {
                        newh = (h/w)*newdim;
                        neww = newdim;
                    } else {
                        neww = (w/h)*newdim;
                        newh = newdim;
                    }
                    elem.style.height = newh + 'px';
                    elem.style.width = neww + 'px';                     
                }
                
                
                //If images are really small skip
                if (newh < 25 || neww < 25) {
                    //console.log(container);
                    //console.log("new h " + newh + " "  + neww + " "  + elem.src);
                    Dom.get(container).style.visibility = 'hidden';
                    Dom.get(container).style.display = 'none';
                    if (makeAsyncImagesVisible) {
                        elem.style.visibility = 'visible';
                        elem.style.display = 'inline';
                    }
                } else {
                    if (makeAsyncImagesVisible) {
                        elem.style.visibility = 'visible';
                        elem.style.display = 'inline';
                    }
                }
            }
        },    
        scSearch: function(o, p) {
            var s = '';
            var  links = YAHOO.lang.JSON.parse(o.responseText);
            var max = (links != null && links.length > 0)?links.length:0;
            if (max > 10) {
                max = 10;
            }
            var field = arguments[0].argument[1];
            var val = arguments[0].argument[2];
            var ndays = arguments[0].argument[4];
            var concatFieldValue = getGraphQuery(field, val);
            var filters = getGraphFilters();
            if (filters == null) {
                filters = new Array();
            }
            var filterString = "";
            for (var filterIdx = 0; filterIdx < filters.length; filterIdx++) {
                filterString += filters[filterIdx] + " > ";
            }
            filterString += arguments[0].argument[2];
            
            var f1 = encodeURIComponent(concatFieldValue);
            var moreLink = "<a class='g-more' href='/a/searchresults.do/queryString-" + encodeURIComponent(val) + '/sort-createDate' + '/ndays-' + ndays + '/refineByDays-false' + "/f1-" + f1 + "'" + 
                 ">" + "See more tags & links" + "</a>";
            var title = '<div class="graph_show_recent">Showing top tags and links for</div> <span class="graph_header_filters">' + filterString + '</span>' + moreLink ;
            //s += title;
            if (Dom.get('graph_header_' + arguments[0].argument[5]) != null) { 
                Dom.get('graph_header_' + arguments[0].argument[5]).innerHTML = title;
            }
            
            var IMAGE_WIDTH = 150;
            var imageArray = new Array();
            for (var i = 0; i < max; i++) {
                var objectHtml = '';
                
                var source = links[i].sourceWebsite;
                if (source.indexOf("http://") != -1) {
                    source = source.substring(7);
                }         
                var idx = source.indexOf("/");
                if (idx != -1) {
                    source = source.substring(0, idx);
                }
                var createDate = links[i].createDate;
                var href = "<h1><a target='_blank' href='" + links[i].sourceWebsite + "'>" + links[i].title + "</a></h1>";
                objectHtml += href;
                
                var f1 = "source=" + source;
                var sourceLink = '/a/searchresults.do/queryString-' + encodeURIComponent(source) + '/sort-createDate' + '/ndays-' + ndays + '/refineByDays-false' + '/f1-' + encodeURIComponent(f1);
                var sourceHtml = '<a class="source" href="' + sourceLink + '"' + links[i].id + '>' + source + '</a>';
                
                var f1 = "author=" + links[i].author;
                var authorLink = '/a/searchresults.do/queryString-' + encodeURIComponent(links[i].author) + '/sort-createDate' + '/ndays-' + ndays + '/refineByDays-false' + '/f1-' + encodeURIComponent(f1);
                var authorHtml = '<a class="author" href="' + authorLink + '"' + links[i].id + '>' + links[i].author + '</a>';
                
                var createDateHtml = '<span class="date">' + createDate + '</span>';
                var pipeHtml = '<span class="pipe">|</span>';
                var blogSundryLinks = '<div class="about">' + sourceHtml + pipeHtml + authorHtml + pipeHtml + createDateHtml + '</div>';
                objectHtml += blogSundryLinks;
                objectHtml += '<div class="objectcontainer">';
                var image = links[i].image;
                if (!YAHOO.lang.isUndefined(image) && !YAHOO.lang.isNull(image) && YAHOO.lang.trim(image) != '') {
                    var imgId = 'graph_img_' + links[i].id;
                    var pid = 'p_img_' + links[i].id;
                    var img = '<img style="width:20px;" class="mi_img_loading" src="/images/uisynth/ajax-loader.gif"/><img style="visibility:hidden;" id="' + imgId + '" class="mi_img" onerror="this.onerror=null;this.src=\'/images/noImgAvbl.gif\';" onload="YAHOO.mirchee.graph.imgResize(' + IMAGE_WIDTH + ', \'' + pid + '\'' + ');" />';
                    //s += img;
                    var container = Dom.get('image_template').cloneNode(true);
                    imageArray[imageArray.length] = {imgId:imgId, imgUrl:image};
                    var shadowContainer = Dom.getElementsByClassName('shadow-container', 'div', container)[0];
                    shadowContainer.style.width = IMAGE_WIDTH + 20;
                    shadowContainer.style.height = IMAGE_WIDTH + 20;
                    shadowContainer.style.float = 'left';
                    
                    var imageHolder = Dom.getElementsByClassName('image_holder', 'div', container)[0];
                    imageHolder.style.width = IMAGE_WIDTH;
                    imageHolder.style.height = IMAGE_WIDTH; 
                    imageHolder.innerHTML = img;
                    //s += container.innerHTML;
                    objectHtml += '<p ' + 'id=' + pid + ' class="image-left">' + img + '</p>';
                } 
                var body = links[i].body;
                if (!YAHOO.lang.isUndefined(body) && !YAHOO.lang.isNull(body) && YAHOO.lang.trim(body) != '') {
                    var shortBody = body;
                    if (YAHOO.lang.trim(body).length > 300) {
                        var regexp = new RegExp(".{300}.*?(\\.|\")");
                        var newBody = body.replace(/\r\n/g, '');
                        newBody = newBody.replace(/\n/g, '');
                        shortBody = regexp.exec(newBody);
                    }
                    objectHtml += '<div class="body">' + shortBody   + '<a class="read" href="/a/detail.do/id-' + links[i].id + '">Similar News >></a></div>';                    
                    //objectHtml += '<div class="body">' + shortBody   + '<a class="read" target="_blank" href="' + links[i].sourceWebsite + '">Read >></a></div>';
                    var shorterBody = body;
                    if (body.length > 200) {
                        shorterBody = body.substring(0, 200);
                    }
                    //s += '<span class="shortbody"><p>' + shorterBody + '</p><a class="more">more</a></span>';
                }
                objectHtml += "</div>";
                var container = Dom.get('object_template').cloneNode(true);
                var objectContainer = Dom.getElementsByClassName('objectcontainer', 'div', container)[0];
                objectContainer.innerHTML = objectHtml;
                s += container.innerHTML;
            }
            var el = arguments[0].argument[0];
            Dom.removeClass(el, 'graph_links_loading');
            Dom.removeClass(el, 'google_graph_links_loading');
            Dom.get(el).innerHTML = s;
            for (var imgIndex = 0; imgIndex < imageArray.length; imgIndex++) {
                var grp = new YAHOO.util.ImageLoader.group(null, null, 1);
                Dom.get(imageArray[imgIndex].imgId).src = imageArray[imgIndex].imgUrl;
                grp.registerSrcImage(imageArray[imgIndex].imgId, imageArray[imgIndex].imgUrl);
            }
            
        },
        fcSearch : function(o) {
            console.log(o);
        },
        scTags : function(o) {
            var data = new google.visualization.DataTable();
            data.addColumn('string', '');
            data.addColumn('number', '');
            data.addColumn('string', 'Link');
            var response = YAHOO.lang.JSON.parse(o.responseText);
            for (i in response) {
                var clusterdata = response[i];
                var len = clusterdata.length>5?5:clusterdata.length;
                if (len > 0) {
                    Dom.removeClass(arguments[0].argument[0], 'hidden');
                }
                data.addRows(len);
                for (var j = 0; j < clusterdata.length; j++) {
                    var moddisplayval = clusterdata[j].value;
                    var modval = clusterdata[j].value;
                    data.setValue(j, 0, moddisplayval);
                    data.setValue(j, 1, clusterdata[j].count);
                    //clicked on some tag to get all these tags - include those in query as well
                    var field = arguments[0].argument[1];
                    var concatFieldValue = '';
                    if (field == 'tags') {
                        var fields = new Array();
                        var values = new Array();
                        values[0] = arguments[0].argument[2];
                        values[1] = modval;
                        fields[0] = {name:'tags', values:values};
                        concatFieldValue = getGraphQuery2(fields);
                    } else {
                        var fields = new Array();
                        var values = new Array();
                        values[0] = arguments[0].argument[2];
                        fields[0] = {name:field, values:values};
                        values = new Array();
                        values[0] = modval;
                        fields[1] = {name:'tags', values:values};
                        concatFieldValue = getGraphQuery2(fields);
                    }
                    var f1 = encodeURIComponent(concatFieldValue);
                    data.setValue(j, 2, '/a/searchresults.do/queryString-' + encodeURIComponent(modval) + '/sort-createDate' + '/refineByDays-false' + '/ndays-' + arguments[0].argument[3] + '/f1-' + f1);
                    if (j == 4) {
                        break;
                    }
                }
            }
            var tc = new TermCloud(document.getElementById(arguments[0].argument[0]));
            tc.draw(data, null);
            
        },
        fcTags : function(o) {
        }
    }
}(); 
