
/****************************************************************
 * Used to toggle the menu visibility
 ***************************************************************/
function ToggleMenuVisibility(id) {
	if(document.getElementById("ul" + id).style.display=="block") {
		document.getElementById("ul" + id).style.display="none";
		document.getElementById("icon" + id).className = "collapsed";
	} else {
		document.getElementById("ul" + id).style.display="block";
		document.getElementById("icon" + id).className = "expanded";
	}
}


/****************************************************************
 * Used to validate text boxes
 ***************************************************************/
function RemoveAllSpecialCharsHandler(event) 
{
    RemoveAllSpecialChars(event.element());
}

function RemoveAllSpecialChars(element) 
{
    //var element = event.element();
    var regEx = /[;\'><]/g;
    if($F(element).search(regEx)> -1)
    {
        var value = $F(element).replace(/\'/g,''); 
         value = value.replace(/[;><]/g,' ')
        $(element).value = value;
        if($($(element).name + 'SA') == null)
        {
            $(element).insert({'after':"<span id='" + $(element).name + "SA' class='SecurityAlert' title='We had to remove some of your input for security reasons.'>!!<span>"});
        }
    }
}

function RemoveSpecialCharsHandler(event) 
{
    RemoveSpecialChars(event.element());
}

function RemoveSpecialChars(element) 
{
    //var element = event.element();
    var regEx = /[;><]/g;
    if($F(element).search(regEx) > -1)
    {
        $(element).value = $F(element).replace(regEx,' '); 
        if($($(element).name + 'SA') == null)
        {
            element.insert({'after':"<span id='" + $(element).name + "SA' class='SecurityAlert' title='We had to remove some of your input for security reasons.'>!!<span>"});
        }
    }
}

document.observe("dom:loaded", function () {
    loadCleanupScript();
    if(typeof Sys != 'undefined')
    {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(loadCleanupScript);
    }
});

function loadCleanupScript() 
{
    if ((typeof allowAll != 'undefined') && (typeof lessSecure != 'undefined'))
    {
        $$('form').each
        (
            function(ele2)
            {
                ele2.observe('submit',
                function()
                {
                    $$('input[type="text"]', 'textarea').each
                    (
                        function(ele)
                        {
                            if(allowAll.indexOf(ele.name.toLowerCase()) >= 0)
                            {
                            //Don't do anything
                            }
                            else if(lessSecure.indexOf(ele.name.toLowerCase()) >= 0)
                            {
                                RemoveSpecialChars($(ele));
                            }
                            else
                            {
                                RemoveAllSpecialChars($(ele));
                            }
                        }
                    );
                });
            }
        )
        
        $$('input[type="text"]', 'textarea').each
        (
            function(ele)
            {
                if(allowAll.indexOf(ele.name.toLowerCase()) >= 0)
                {
                //Don't do anything
                }
                else if(lessSecure.indexOf(ele.name.toLowerCase()) >= 0)
                {
                    $(ele).observe('blur', RemoveSpecialCharsHandler);
                }
                else
                {
                    $(ele).observe('blur', RemoveAllSpecialCharsHandler);
                }
            }
        );
    }
}



/****************************************************************
 * Used to toggle the Div visibility
 ***************************************************************/
function ToggleDivVisibility(divid) {
	if(document.getElementById("div" + divid).style.display=="block") {
		document.getElementById("div" + divid).style.display="none";
    } else if(document.getElementById("div" + divid).style.display=="inline") {
		document.getElementById("div" + divid).style.display="none";
	} else {
		document.getElementById("div" + divid).style.display="block";
	}
}

/****************************************************************
 * Used to set the value attribute of the supplied widgetId
 ***************************************************************/
function SetWidgetValue(widgetId, text) {
    widget = document.getElementById(widgetId);
    widget.value = text;
}


/****************************************************************
 * Used to change the CSS stylesheet of a document.
 ***************************************************************/
function ChangeStyleSheet(divid) {
    alert("Style sheet" + document.styleSheets[0]);
	/*if(document.getElementById("div" + divid).style.display=="block") {
		document.getElementById("div" + divid).style.display="none";
	} else {
		document.getElementById("div" + divid).style.display="block";
	}*/
}


// ********************************************************* 
//  Site (wide) Search client side script (for SiteSearch user control).
// ********************************************************* 

var SiteSearch = {

	HandleEnterKey: function(ev, clickElementName)
	{
		//Get KeyCode that was pressed, taking into account the browser differences.
		var keyCode = (window.event) ? window.event.keyCode : ev.which;

		//If Enter was presses, stop event propigation.
		if (keyCode == 13)
		{

			//Get the click event of the element name passed in, and call it.
			var clickFunction = document.getElementById(clickElementName).onclick
			if (clickFunction) 
			{ 
				clickFunction();
			}
			
			//Return false to stop further actions.
			return false;
		}
		
		//Enter Key Not Pressed.
		return true;
	},

	Search: function()
	{
	
		if (document.getElementById("Ntt").value.length == 0)
		{
			alert("Please enter some search criteria.");
			document.getElementById("Ntt").focus();
			return;
		}
		
		if (document.getElementById("searchSelect").value.length == 0) 
		{
			alert('Please Pick a Department.'); 
			document.getElementById("searchSelect").focus();
			return;
		}

		var Ntk = "SearchInterface";
		var Ntx = "mode+matchallany";
		var Nty = "";
		var url = "/Shopping/Results.aspx" ;
		location =  url + 
			"?Ntk=" + Ntk + 
			"&Ntx=" + Ntx + 
			"&Nty=" + Nty + 
			"&Ntt=" + document.getElementById("Ntt").value + 
			"&Department=" + document.getElementById("searchSelect").value;
	},

	SearchWithin: function(qs,watermarkText) 
	{
	    var searchBox = $$('.nav-search .nav-search-box').first();
		if (searchBox.value == "" || searchBox.value == watermarkText) 
		{
			alert("Please enter some search criteria.");
			searchBox.focus();
			return false;
		}

		location = "/Shopping/Results.aspx?" + qs + "&Ntt=" + searchBox.value + '&leftsearch=1';
	},
	
	ShowRefinements: function (linkID,tdID) 
	{
		allLink = document.getElementById(linkID);
		allTD = document.getElementById(tdID);
		
		if (allTD.style.display == 'inline') {
			allTD.style.display = 'none';
			allLink.className = 'CatTreePlus_Lvl_0';
		} else {
			allTD.style.display = 'inline';
			allLink.className = 'CatTreeMinus_Lvl_0';
		}
	}	
};



// Removes leading whitespaces
function LTrim( value ) {
	
	var re = /\s*((\S+\s*)*)/;
	return value.replace(re, "$1");
	
}

// Removes ending whitespaces
function RTrim( value ) {
	
	var re = /((\s*\S+)*)\s*/;
	return value.replace(re, "$1");
	
}

// Removes leading and ending whitespaces
function trim( value ) {
	
	return LTrim(RTrim(value));
	
}




//AJAX calls for the Endeca Descriptors
var allLinkID;
var optionsDivID;
var optionsDivFillID;
function SelectSiblings(sibLinkID,optDivID,optDivFillID,endQuery,targetDim) 
{
	allLinkID = sibLinkID;
	optionsDivID = optDivID;
	optionsDivFillID = optDivFillID;	

	optDiv = document.getElementById(optionsDivID);
	optDivFill = document.getElementById(optionsDivFillID);
	allLink = document.getElementById(allLinkID);

	// Test for the location of View All.  If 
	var bAllowAjaxLoad = false;
	var str = optDivFill.innerHTML;
	str = trim(str);
	
	bAllowAjaxLoad = (str.length == 0);
    
    //alert(str.length);
	if (bAllowAjaxLoad == false) {
		if (optDiv.style.display == 'inline') {
			optDiv.style.display = 'none';
			optDivFill.style.display = 'none';
			allLink.className = 'CatTreePlus_Lvl_0';
		} else {
			optDiv.style.display = 'inline';
			optDivFill.style.display = 'inline';
			allLink.className = 'CatTreeMinus_Lvl_0';
		}
	} else {	        
		//alert('/endeca/endeca_ajax_results.asp?Query=' + endQuery + '&Dimension=' + targetDim, 'FillSelect')
		sendAJAXRequest('AResults.aspx?Query=' + endQuery + '&Dimension=' + targetDim, 'FillSelect');
	}
}

function FillSelect(bSuccess, resultsHTML) {

	var options_array = resultsHTML.split("|");
	var options_text = '<table cellspacing=0 cellpadding=0>';
		
	for (var i=0;i < options_array.length-1;i++) {		
		ret_array = options_array[i].split("~");
		optVal = ret_array[0];
		optText = ret_array[1];		

        //options_text += '<tr><td><a class="catLvlTwo" href="cat_e.asp?' + optVal + '"><span class=catTxt>' + optText + '</span></a></td></tr>';
        options_text += '<tr><td><a href="Results.aspx?' + optVal + '"><span class=catTxt>' + optText + '</span></a></td></tr>';

    }
	options_text += '</table>'

	document.getElementById(optionsDivID).style.display = 'inline';
	document.getElementById(optionsDivFillID).style.display = 'inline';
	document.getElementById(allLinkID).className = 'CatTreeMinus_Lvl_0';
	document.getElementById(optionsDivFillID).innerHTML = options_text;
}

var AJAX_request = false;
function sendAJAXRequest(url, callback) 
{
    AJAX_request = false;
        
    if (window.XMLHttpRequest)		// Mozilla, Safari,...
	{	    
		AJAX_request = new XMLHttpRequest();
        if (AJAX_request.overrideMimeType) 
        {
            AJAX_request.overrideMimeType('text/xml');
        }
    } 
    else if (window.ActiveXObject)	// IE
    {         
        try 
        {
            AJAX_request = new ActiveXObject("Msxml2.XMLHTTP");
        } 
        catch (e) 
        {
            try 
            {
                AJAX_request = new ActiveXObject("Microsoft.XMLHTTP");
            } 
            catch (e) {}
        }
    }

    if (!AJAX_request) {
        //alert('Giving up :( Cannot create an XMLHTTP instance');
        return false;
    }

	if (AJAX_request.overrideMimeType) {
      AJAX_request.overrideMimeType('text/xml');
    }

	AJAX_request.onreadystatechange = evalAJAXResponse;
    AJAX_request.open("GET", url, true);
	AJAX_request.send(null);
}

function evalAJAXResponse() 
{
    if (AJAX_request.readyState == 4) 
    {
        if (AJAX_request.status == 200) 
        {
            //alert(AJAX_request.responseText);
			FillSelect(true,AJAX_request.responseText);
        } 
        else 
        {
			FillSelect(false, "There was a problem sending the request.");
        }
    }
}

function evalAJAXError(callback, message)
{
    eval(callback + '(false, "' + message + '")');
}

//ref : http://lunarmedia.com/blogs/lunarmedia_blog/archive/2006/10/23/120405.aspx
function escapeHTML (str)
{
   var div = document.createElement('div');
   var text = document.createTextNode(str);
   div.appendChild(text);
   return div.innerHTML;

}

// ref : http://discuss.fogcreek.com/dotnetquestions/default.asp?cmd=show&ixPost=5015
function htmlEncode(s) {
        var str = new String(s);
        str = str.replace(/&/g, "&amp;");
        str = str.replace(/</g, "&lt;");
        str = str.replace(/>/g, "&gt;");
        str = str.replace(/"/g, "&quot;");
        return str;
} 

// ref : http://techpatterns.com/downloads/javascript_cookies.php
function Get_Cookie( check_name ) {
	// first we'll split this cookie up into name/value pairs
	// note: document.cookie only returns name=value, not the other components
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f

	for ( i = 0; i < a_all_cookies.length; i++ )
	{
		// now we'll split apart each name=value pair
		a_temp_cookie = a_all_cookies[i].split( '=' );


		// and trim left/right whitespace while we're at it
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

		// if the extracted name matches passed check_name
		if ( cookie_name == check_name )
		{
			b_cookie_found = true;
			// we need to handle case where cookie has no value but exists (no = sign, that is):
			if ( a_temp_cookie.length > 1 )
			{
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			// note that in cases where cookie is initialized but no value, null is returned
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found )
	{
		return null;
	}
}


// ****************************************************************************
// Internal Campaign Tracking Helper.  Will add the value of the icid attribute to the href of an
// anchor element.
// ****************************************************************************
var ICIDHelper = {

	init : function()
	{
		$$('a[icid]').each(
			function(anchor)
			{
				var sep = (anchor.href.indexOf("?") > 0) ? "&" : "?";
				anchor.href = anchor.href + sep + "icid=" + encodeURIComponent(anchor.attributes["icid"].value);
			}
		);
	}
	
};

Event.observe(window, "load", ICIDHelper.init);

// ****************************************************************************
// cleans up AJAX response from RenderControls
// ****************************************************************************
var CleanAjaxResponse = function(responseText) {
    return responseText.replace(/<\/?form.*?>/g, '').replace(/<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" .*?>/g, '');
}

var RemoveScriptFromAjaxResponse = function(responseText) {
    return responseText.replace(/<\/?script.*?>/g, '');
}


