//Create Feed Filter Namespace
var $Feeds = TGN.namespace("TGN.Ancestry.Community.Feeds");
if ( 'undefined' == typeof _YDom ) _YDom = YAHOO.util.Dom;
if ( 'undefined' == typeof _YEvent ) _YEvent = YAHOO.util.Event;

$Feeds.currentRequest = null;
$Feeds.displayCount = 10;
$Feeds.totalFeedsRequested = 0;
$Feeds.timeoutId = null;
$Feeds.context = 0;
$Feeds.pid = "";
$Feeds.tid = "";
$Feeds.nodeName = "";
var _feedsLoaded = true;

$Feeds.getFilterFlag = function() {
    var filters = _YDom.getElementsBy(function(el) { return el.type == 'checkbox'; }, 'input', 'feedFilters');
    var filterFlag = 0;
    if (undefined != filters && filters.length > 0) {
        var i = 0;
        for (i = 0; i < filters.length; i++) {
            if (!filters[i].checked)
                filterFlag = filterFlag | parseInt(filters[i].value, 10);
        }
    }
    return filterFlag;
};

$Feeds.getTreeFilter = function() {
    var trees = _YDom.getElementsBy(function(el) { return el.className == 'treefilter'; }, 'input', 'treeFilters');
    var filters = "";
    if (undefined != trees && trees.length > 0) {
        var i = 0;
        for (i = 0; i < trees.length; i++) {
            if (!trees[i].checked)
                filters = trees[i].value + "," + filters;
        }
    }
    if (filters.length > 0)
        filters = filters.substring(0, filters.length - 1);
    else
        filters = "-1";
    return filters;
};

$Feeds.currentFilteredRequest = null;
$Feeds.getFilteredFeedList = function() {
//Check to see if we are waiting for a previous check/uncheck if we are then clear it's timer
    if ($Feeds.timeoutId != null)
        clearTimeout($Feeds.timeoutId);
    //If there is already an outstanding request abort it as soon as possible
    //if (null != $Feeds.currentFilteredRequest)
    //$Feeds.currentRequest.abort(false);
    //Set up a timeout for the current check/uncheck
    $Feeds.timeoutId = setTimeout(function() { $Feeds.getFilteredFeeds(); }, 1000);
};

$Feeds.getFilteredFeeds = function() {
    $Feeds.timeoutId = null;
    //show loading
    var div = _YDom.get("loading");
    if (div != undefined)
        div.style.display = "block";
    //disable check boxes
    $Feeds.disableFilters(true);

    var params = "&fFilter=" + $Feeds.getFilterFlag() + "&tFilter=" + $Feeds.getTreeFilter();
    params += "&dc=" + $Feeds.totalFeedsRequested + "&ctx=" + $Feeds.context;
    if ($Feeds.tid.length > 0)
        params += "&tid=" + $Feeds.tid;
    if ($Feeds.pid.length > 0)
        params += "&pid=" + $Feeds.pid;
    if ($Feeds.nodeName.length > 0)
        params += "&nname=" + $Feeds.nodeName;

    var callBack = { success: $Feeds.displayFilteredFeeds, failure: $Feeds.displayError, timeout: 20000 };
    $Feeds.currentRequest = new TGN.Util.AjaxRequest("GET", "/community.ashx", "f=GetFilteredFeeds" + params, callBack, "");
    $Feeds.currentRequest.invoke();
};

$Feeds.displayFilteredFeeds = function(o) {
var feedList = _YDom.get("feedList");
    if(feedList != undefined)
        _YDom.get("feedList").innerHTML = o.responseText;

    $Feeds.enableFilters();
    var loading = _YDom.get("loading");
    if (loading != null)
        loading.style.display = "none";
    //$Feeds.currentFilteredRequest = null;
};

$Feeds.initFilters = function() {
    var filters = $Feeds.getFilters();
    var i = 0;
    for (i = 0; i < filters.length; i++) {
        filters[i].checked = true;
        $Feeds.enableFilters();
    }
};

$Feeds.getFilters = function() {
    return _YDom.getElementsBy(function(el) { return el.type == 'checkbox'; }, 'input', 'filterContainer');
};

$Feeds.disableFilters = function() {
    var filters = $Feeds.getFilters();
    if (undefined != filters && filters.length > 0) {
        var i = 0;
        for (i = 0; i < filters.length; i++) {
            filters[i].disabled = true;
        }
    }
};

$Feeds.enableFilters = function() {
    var filters = $Feeds.getFilters();
    if (undefined != filters && filters.length > 0) {
        var i = 0;
        for (i = 0; i < filters.length; i++) {
            filters[i].removeAttribute("disabled");
        }
    }
};

$Feeds.filterPopupContainer = null;
$Feeds.getFilterPopup = function(alignId) {
    var scope = { alignId: alignId };
    var callBack = { success: $Feeds.displayFilterPopup, failure: $Feeds.displayError, timeout: 20000, scope: scope };
    var request = new TGN.Util.AjaxRequest("GET", "/community.ashx", "f=GetFilterPopup&ctx=" + $Feeds.context, callBack, "");
    request.invoke();
};

$Feeds.displayFilterPopup = function(o, scope) {
    if ($Feeds.filterPopupContainer == null) {
        //create the container for the filter
        var div = document.createElement("div");
        div.id = "filterContainer";
        div.className = "filterPopupContainer";
        $Feeds.filterPopupContainer = div;
        document.body.appendChild($Feeds.filterPopupContainer);
    }
    $Feeds.filterPopupContainer.innerHTML = o.responseText;
    $Feeds.filterPopupContainer.style.display = "block";
    var alignElement = _YDom.get("feedList");
    xy = _YDom.getXY(alignElement);
    _YDom.setY($Feeds.filterPopupContainer, xy[1]);
    _YDom.setX($Feeds.filterPopupContainer, xy[0] + (alignElement.clientWidth - $Feeds.filterPopupContainer.clientWidth));
};

$Feeds.closeFilterPopup = function(o) {
    $Feeds.filterPopupContainer.style.display = "none";
};

$Feeds.viewMoreFeeds = function(offsetId) {
    var callBack = { success: $Feeds.renderMoreFeeds, failure: $Feeds.displayError, timeout: 20000 };
    var params = "&offset=" + offsetId + "&dc=" + $Feeds.displayCount + "&ctx=" + $Feeds.context;
    if($Feeds.context == 2)
        params += "&fFilter=" + $Feeds.getFilterFlag() + "&tFilter=" + $Feeds.getTreeFilter();
    if ($Feeds.tid.length > 0)
        params += "&tid=" + $Feeds.tid;
    if ($Feeds.pid.length > 0)
        params += "&pid=" + $Feeds.pid;
    if ($Feeds.nodeName.length > 0)
        params += "&nname=" + $Feeds.nodeName;
    $Feeds.currentRequest = new TGN.Util.AjaxRequest("GET", "/community.ashx", "f=GetMoreFeeds" + params, callBack, "");
    $Feeds.currentRequest.invoke();
    $Feeds.totalFeedsRequested += $Feeds.displayCount;
};

$Feeds.renderMoreFeeds = function(o, scope) {
    var viewMoreLink = _YDom.get("moreLinkContainer");
    //hide the old view more link if it is on the page
    if (undefined != viewMoreLink) {
        viewMoreLink.id = "";
        viewMoreLink.style.display = "none";
    }
    var feedList = _YDom.get("feedList");
    if (feedList != undefined)
        feedList.innerHTML += o.responseText;
};

$Feeds.getFeedInfo = function(id, ctx, ufc) {
	$Feeds.trackUserClick(ufc + ":Why");
	var scope = { id: id };
    var callBack = { success: $Feeds.renderFeedInfo, failure: $Feeds.displayError, timeout: 20000, scope: scope };
    var request = new TGN.Util.AjaxRequest("GET", "/community.ashx", "f=GetFeedInfo&id=" + id + "&ctx=" + ctx, callBack, "");
    request.invoke();
};

$Feeds.viewExtra = function(toggleId, divId) {
    var toggle = _YDom.get(toggleId);
    var div = _YDom.get(divId);
    if (toggle) { toggle.style.display = 'none'; }
    if (div) { div.style.display = ''; }
    var attributes = {
        backgroundColor: { to: '#ffffff' },
        duration:1.5
    };
    var anim = new YAHOO.util.ColorAnim(divId, attributes); 
    anim.animate();
};

$Feeds.showHide = function(qId, isHovering) {
    var q = _YDom.get(qId);
    if (isHovering)
    {
        q.style.visibility = 'visible';
    }
    else { q.style.visibility = 'hidden'; }
};

$Feeds.feedPopup = null;
$Feeds.renderFeedInfo = function(o, scope) {
    if (null == $Feeds.feedPopup) {
        $Feeds.feedPopup = document.createElement("div");
        document.body.appendChild($Feeds.feedPopup);
    }
    $Feeds.feedPopup.style.display = "block";
    $Feeds.feedPopup.innerHTML = o.responseText;
    var q = _YDom.get('q_' + scope.id);
    var xy = _YDom.getXY(q);
    xy[0] = xy[0] - 275;
    _YDom.setXY($Feeds.feedPopup, xy);
};

$Feeds.closePopup = function() {
    $Feeds.feedPopup.style.display = "none";
};

$Feeds.getRollupInfo = function(id, ctx, ufc) {
	var ri = _YDom.get('r_' + id);
	var link = _YDom.get('toggle_' + id);
	if (ri == null) {
	    link.innerHTML = hideRollup;
		$Feeds.trackUserClick(ufc + ":Rollup");
		var scope = { id: id };
		var callBack = { success: $Feeds.renderRollupInfo, failure: $Feeds.displayError, timeout: 20000, scope: scope };
		var request = new TGN.Util.AjaxRequest("GET", "/community.ashx", "f=GetRollupInfo&id=" + id + "&ctx=" + ctx, callBack, "");
		request.invoke();
	} else {	    
		$Anc.ShowHide('r_' + id);	
		if (link.innerHTML == hideRollup)
		{
		    link.innerHTML = showRollup;
		}	
		else { link.innerHTML = hideRollup; }
	}
	
};

$Feeds.renderRollupInfo = function(o, scope) {
	var rolldiv = document.createElement("div");
    
	rolldiv.setAttribute('id','r_' + scope.id);
	rolldiv.setAttribute('class', 'rollupInfo');
    rolldiv.style.display = "block";
    rolldiv.style.padding = "6px 0";
    rolldiv.style.marginLeft = "50px";
    rolldiv.innerHTML = o.responseText;
    var fi = _YDom.get('item_' + scope.id);
    fi.appendChild(rolldiv);
};

$Feeds.resetFilters = function() {
    var filters = $Feeds.getFilters();
    if (undefined != filters && filters.length > 0) {
        var i = 0;
        for (i = 0; i < filters.length; i++) {
            filters[i].checked = true;
        }
    }
};

$Feeds.initFilters = function() {
    //incase the filters got cached on the client in a disabled state cycle through them and reset them
    $Feeds.enableFilters();
    if ($Feeds.context == 2)
        $Feeds.resetFilters();
};

$Feeds.trackUserClick = function(ufc) {
// report tracking context to omniture
	if (ufc != null) {
		var s = s_gi(s_account, 1);
		s.prop20 = ufc;
		s.tl();
	}
};

_YEvent.onDOMReady($Feeds.initFilters);

