/**                      
 * Make RRSA taskbar visible
 */
function hoverRRSA(id) {
//    a10.debug('hoverRRSA');

    if(_fFlag) { //fade in animation running, do nothing
        return;
    }

    var taskbar = $(id);
    if (taskbar) {
        taskbar.style.visibility = 'visible';
    }
}

/**
 * Hide RRSA taskbar
 */
function unhoverRRSA(id) {
//    a10.debug('unhoverRRSA');

    if(_fFlag) { //fade in animation running, do nothing
        return;
    }

    var taskbar = $(id);
    if (taskbar) {
        taskbar.style.visibility = 'hidden';
    }
}

var RRSAToggle = {
    _prefixTB: 'taskbarRRSA_',
    _prefixSA: 'contentRRSA_',
    _prefixFM: 'formRRSA_',
    _prefixBL: 'backLinkRRSA_',
    _rrAnimSpeed: 0.7, // decreasing makes fade faster
    _rrFadeTO: {},
    _rrFadeSpeed: 70, // decreasing makes fade faster

    onSearchFormSuccess: function(request,pos) {
        var formDiv = $(this._prefixFM+ pos);
        formDiv.innerHTML = getContent('rr_search', request.responseText);
        formDiv.hasForm = 1;

        // start fading out SA content
        this.fadeOutRRSA(pos);
    },

    fadeOutRRSA: function(pos) {
        // start fading out SA content to a faded (but still displayed) state
        a10.anim.fadeOutToOpacity(this._prefixSA+ pos, this._rrAnimSpeed, 0.1, function(){ RRSAToggle.fadeOutRRSADone(pos); });
    },

    fadeOutRRSADone: function(pos) {
        // show back link
        var back = $(this._prefixBL+ pos);
        back.style.display = '';

        // set initial opacity of Search form
        var form = $(this._prefixFM+ pos);
        form.style.opacity = "0.1";

        // hide SA content now, and show faded Search form
        $(this._prefixSA+ pos).style.display = 'none';
        form.style.display = '';

        // start fading in Search form
        this.fadeInSearchForm(pos);
    },

    fadeInSearchForm: function(pos) {
        a10.anim.fadeIn(this._prefixFM+ pos, this._rrAnimSpeed, function(){ RRSAToggle.fadeInSearchFormDone(pos); });
    },

    fadeInSearchFormDone: function(pos) {
        // give search form the focus
        var input = getFirstFormInput($(this._prefixFM+pos));
        if (input) {
            input.focus();
        }
    },

    fadeOutSearchForm: function(pos) {
        a10.anim.fadeOutToOpacity(this._prefixFM+ pos, this._rrAnimSpeed, 0.1, function(){ RRSAToggle.fadeOutSearchFormDone(pos); });
    },

    fadeOutSearchFormDone: function(pos) {
        // show taskbar
        var taskbar = $(this._prefixTB+ pos);
        taskbar.style.display = '';

        // set initial opacity of SA content
        var content = $(this._prefixSA+ pos);
        content.style.opacity = '0.1';

        // hide Search form now, and show faded SA content
        $(this._prefixFM+ pos).style.display = 'none';
        content.style.display = '';

        // start fading in SA content
        this.fadeInRRSA(pos);
    },

    fadeInRRSA: function(pos) {
        a10.anim.fadeIn(this._prefixSA+ pos, this._rrAnimSpeed, function() { RRSAToggle.fadeInRRSADone(pos); });
    },

    fadeInRRSADone: function(pos) {
        // nothing to do...
    },

    rrIsDisplayed: function(elem) {
        return elem.style.display != 'none';
    }
};

RRSAToggle.showRightRailSearchForm = function(pos, taskbarId) {

    var origin = $F('o');
    var partnerID = $F('l');
    var siteID = $F('siteid');

    if (origin == "") {
        // Use origin = 0 as default
        origin = 0;
    }

    if (partnerID == "") {
        // Use partnerID = dir as default
        partnerID = 'dir';
    }

    if( siteID == ""){
        // Use '' as default
        siteID = '';
    } else {        
        siteID = '&siteid=' + $F('siteid');
    }

    // hide taskbar immediately
    var taskbarDiv = $(this._prefixTB+pos);
    taskbarDiv.style.display = 'none';

    var contentDiv = $(this._prefixSA+pos);
    var formDiv = $(this._prefixFM+pos);
    if (this.rrIsDisplayed(contentDiv)) { // SA content displayed
        if (!formDiv.hasForm) {
            // if we don't have search form content, go get it first
            a10.ajax.get(_rightrailsearchUrls['web']+"?taskbarId="+taskbarId+"&rrIdx="+pos+"&o="+origin+"&l="+partnerID+siteID, function(request) { RRSAToggle.onSearchFormSuccess(request, pos); });
        } else {
            // start fading out SA content
            this.fadeOutRRSA(pos);
        }
    } else {
        // ensure search form is displayed
        formDiv.style.opacity = '1.0';
        formDiv.style.display = '';
        $(this._prefixBL+pos).style.display = '';
    }
};

RRSAToggle.showRightRailSA = function(pos) {
    // hide back link immediately
    var backDiv = $(this._prefixBL+pos);
    backDiv.style.display = 'none';

    if (this.rrIsDisplayed($(this._prefixFM+pos))) { // Search form displayed
        // start fading out search form
        this.fadeOutSearchForm(pos);
    } else {
        // ensure SA content is displayed
        $(this._prefixSA+pos).style.opacity = '1.0';
        $(this._prefixSA+pos).style.display = '';
        $(this._prefixTB+pos).style.display = '';
    }
};


/**
 * RR Search Form: submit form using hash URL
 */
function submitAjaxQuery(form) {
    if (form && form.q) {
        var action = form.action;
        var index = action.indexOf("#"); //if hash exists, should only search via the addHistory method
        if(index != -1) {
            var hash = action.substring(index+1);
            if(hash != '') {
                var params = splitUrlQuery(hash);
                params['q'] = form.q.value;
                if(params['ch'] == '') {
                    params['ch'] = 'web';//default to web
                }
                a10.browser.addHistory(params);
            }
        }
    }
}

/**
 * RR Search Form: validate whether RR search form query is empty
 */
function validateRRSearchForm(form) {
    if (form && form.parentNode) {
        var parent = form.parentNode;
        var inputs = parent.getElementsByTagName("input");
        for (var i in inputs) {
            if (inputs[i].type == "text" && inputs[i].value == "") {
                return false;
            }
        }
    }
    return true;
}

/**
 * RR Search Form: Generate the query string by inserting input values into a query string template.
 */
function formatQuery(form, qstr, inputs, delim) {
    if (form && form.q && qstr) {
        var inputsArr = parseStringList(inputs, delim);
        var valArr = new Array();
        var i;
        for (i=0; i<inputsArr.length; i++) {
            var input = getFormInput(form, inputsArr[i]);
            if (input) {
                valArr[i] = input.value;
            } else {
                return false; // error finding input; quit
            }
        }
        form.q.value = formatString(qstr, valArr);
    }
    return true;
}

/**
 * Find the form input with given name. Need to iterate to work with compressed js.
 */
function getFormInput(form, name) {
    var i;
    for (i=0; i<form.childNodes.length; i++) {
        if (form.childNodes[i].nodeName && form.childNodes[i].name == name) {
            return form.childNodes[i];
        } else {
            var input = getFormInput(form.childNodes[i], name);
            if (input) {
                return input;
            }
        }
    }
    return null;
}

/**
 * Find the first form input. Need to iterate to work with compressed js.
 */
function getFirstFormInput(form) {
    var i;
    for (i=0; i<form.childNodes.length; i++) {
        if (form.childNodes[i].nodeName == 'INPUT') {
            return form.childNodes[i];
        } else {
            var input = getFirstFormInput(form.childNodes[i]);
            if (input) {
                return input;
            }
        }
    }
    return null;
}

/**
 * Formats a string template with given parameter values.
 */
function formatString(str, valArr) {
    var newStr = "";
    var start = 0;
    var open = str.indexOf("{");
    var close = str.indexOf("}", open);
    while (open >= 0 && close > 0) {
        newStr += str.substring(start, open);
        if (open+1 < close) { // brackets not empty
            var valIdx = str.substring(open+1, close);
            newStr += valArr[valIdx];
        }
        start = close+1;
        open = str.indexOf("{", close);
        close = str.indexOf("}", open);
    }
    newStr += str.substring(start);
    return newStr;
}

/**
 * Parses a delimited string into a javascript array
 */
function parseStringList(values, delim) {
    var valArr = new Array();
    var start = 0;
    var end = values.indexOf(delim);
    var i;
    for (i=0; end > 0; i++) {
        valArr[i] = values.substring(start, end);

        start = end+1;
        end = values.indexOf(delim, start);
    }
    if (start < values.length) {
        valArr[i] = values.substring(start);
    }
    return valArr;
}

/*
 * Play embedded sound for Dictionary RRSA
 */
function rrContentDictPlay(url) {
    var soundSpan = document.getElementById("soundspan");
    if (soundSpan) {
        // clear out any existing plug-ins (in FF2.0, the plug-in actually takes up space on page, so must limit this as much as possible)
        soundSpan.innerHTML = "";

        var e = document.createElement("embed");
        if(!e) return true;
        e.setAttribute("src",url);
        e.setAttribute("hidden","true");
        e.setAttribute("autostart","true");
        e.setAttribute("loop","false");
        e.setAttribute("width","0");
        e.setAttribute("height","0");
        soundSpan.appendChild(e);
        return true;
    }
}

/**
 * The RR Image SA namespace
 */
var rrImgSA = window.rrImgSA || {};

if (!ask) var ask = {}; 

rrImgSA = function() {
    // @TODO: remove unnecessary prototype dependency
    var picsInRow = 3;
    var marginCompensation = 4; // compensate excesses due to borders and such
    var rolloverImgId = 'rrsa_ro_i';
    var rolloverHaloId = 'rrsa_ro_shadow_i';

    return {
        getRolloverEl: function(picIndex){
            var ro = $('rrsa_apurl_i' + picIndex);
            if (!ro){
                ro = $('rrsa_url_i' + picIndex); // it's either ap images or judy
            }
            return ro;
        },
        onImgClick: function(picIndex) {
            var ro = this.getRolloverEl(picIndex);
            if (ro && ro.onmousedown){
                ro.onmousedown(ro); // execute pick logging
                location.href = ro.href;
            }
        },

        onCropOver: function(picIndex) {
            var imgEl = $(rolloverImgId + picIndex); // rollover image
            var haloEl = $(rolloverHaloId + picIndex); // halo around rollover image

            imgEl.style.display = "block";
            // safari hack
            haloEl.style.display = "block";

            // do logging after displaying the image
            var ro = this.getRolloverEl(picIndex);
            if (ro && ro.onmouseover){
                ro.onmouseover(ro); // execute pick logging
            }
        },

        onCropOut: function(picIndex) {
            $(rolloverImgId + picIndex).style.display = "none";
            // safari hack
            $(rolloverHaloId + picIndex).style.display = "none";
        }
    }
}();
/**
 * The RR Glubble SA namespace
 */
var rrGlubbleSA = window.rrGlubbleSA || {};

if (!ask) var ask = {};

rrGlubbleSA = function() {
	return {
		onMouseover : function(what_link, staticDomain) {
				var divnode = document.getElementById('glubble_popup_bubble');
				if (!divnode)
				{
					what_left = rrGlubbleSA.GetAbsoluteLocation(document.getElementById('glubble_what_this')).absoluteLeft;
				    what_top = rrGlubbleSA.GetAbsoluteLocation(document.getElementById('glubble_what_this')).absoluteTop;
					var logoImgSrc = "http://" + staticDomain + "/i/askforkids/a10f/reply/glubble.gif";
                    divnode = document.createElement("div");
					divnode.setAttribute('id','glubble_popup_bubble');
					divnode.onmousemove = rrGlubbleSA.onMouseover;
					divnode.onmouseout = rrGlubbleSA.onMouseout;
					htmlstr = '<div id="glubble_popup_bubble_container">';
                    htmlstr += '<a href="' + what_link + '">';
					if (!a10.browser.isIE6())
				  	{
						htmlstr +='<div id="glubble_arrowdiv" ></div>';
				  	}
					else
					{
						htmlstr +='<div id="glubble_arrowdiv" style="width:10px; height:10px;left:246px;"></div>';
					}
					htmlstr +='<div id="glubble_textheading">';
					htmlstr +='<img id="glubble_logo" src="'+ logoImgSrc + '"/>';
					htmlstr	+='</div>';
					htmlstr +='<div id="glubble_textdiv">';
					htmlstr +='Glubble is a family web browser that connects family members. It includes fun and safe web surfing for children, a private family page with messaging and sharing of photos and events. Ask Kids has partnered with Glubble to bring Kids the best kid friendly content on the web.';
					htmlstr	+='</div>';
					htmlstr +='</a>';
					htmlstr +='</div>';
				  	divnode.innerHTML = htmlstr;
				  	if (a10.browser.isIE6())
				  	{
				  		divnode.style.left = (what_left - 170) + 'px';
				  	}
				  	else
				  	{
				  		divnode.style.left = (what_left - 176) + 'px';
				  	}
					divnode.style.top = (what_top - 20) + 'px';
					document.getElementsByTagName("body")[0].appendChild(divnode);
					divnode.style.display = 'block';
				}
				else
				{
					divnode.style.display = 'block';
				}
		},
		onMouseout : function() {
				var divnode = document.getElementById('glubble_popup_bubble');
				if (divnode)
				{
					divnode.style.display = 'none';
				}
		},
		GetAbsoluteLocation : function(element) {
				if ( arguments.length != 1 || element == null )
	          	{
					return null;
		        }
				var offsetTop = element.offsetTop;
				var offsetLeft = element.offsetLeft;
				var offsetWidth = element.offsetWidth;
				var offsetHeight = element.offsetHeight;
				while( (element = element.offsetParent) )
				{
					offsetTop += element.offsetTop;
					offsetLeft += element.offsetLeft;
		        }
				return {
					absoluteTop: offsetTop, absoluteLeft: offsetLeft,
					offsetWidth: offsetWidth, offsetHeight: offsetHeight };
	    }
	}
}();

