jQuery(document).ready(function() {

    jQuery('.fix-z-index').bgiframe();

    // the tool tips for the quickfinder.  Anchor tags with the 'help-on' class will be clickable
    // to display a div with text explaining a particular filter
    jQuery('.help-on').click(function() {
        // set the display to 'on' for the appropriate div with the content
        var position = jQuery(this).position();
        var current = jQuery(this).next(".prototip");
        jQuery(current).css({"left": position.left - 206, "top": position.top - 4, "display": "block", "z-index":maxZ});
        maxZ = parseInt(jQuery(current).css("z-index"))+1;
    })

    // this is when the user clicks the 'close' link on the help text div for filters
    jQuery('.close').click(function() {
        // find the 'prototip' parent and set the 'left' and 'top' so that they disappear from the
        // page
        jQuery(this).parent('.title').parent('.toolbar').parent('.tooltip').parent('.prototip').css({"left": "2045px", "display":"none"});

    })


});

function moreOptions(clicked, name) {

    if (name != 'undefined' && name != null){
        jQuery('#moreSearchOptions-' + name).slideToggle();
    } else {
        jQuery('#moreSearchOptions').slideToggle();
    }

    if (jQuery(clicked).hasClass('moreOptions')){
        jQuery(clicked).removeClass('moreOptions');
        jQuery(clicked).addClass('fewerOptions');
    } else {
        jQuery(clicked).removeClass('fewerOptions');
        jQuery(clicked).addClass('moreOptions');
    }
    
}

var maxZ;

// Navigation

sfHover = function() {
    if(null != document.getElementById("nav")) {
        var sfEls = document.getElementById("nav").getElementsByTagName("LI");
        for (var i=0; i<sfEls.length; i++) {
            sfEls[i].onmouseover=function() {
                this.className+=" sfhover";
            }
            sfEls[i].onmouseout=function() {
                this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
            }
        }
    }
}
if (window.attachEvent) window.attachEvent("onload", sfHover);

// Count remaining characters of textarea
function CountLeft(field, max) {
 // if the length of the string in the input field is greater than the max value, trim it
 if (field.value.length > max)
 field.value = field.value.substring(0, max);
 else
 // calculate and display the remaining characters
 $('remaining').innerHTML = max - field.value.length;
 }

// Search Results

function hideSummaries(){
$('content').toggleClassName('hideSummeries');
}

function viewSearchTips(){
$('searchTips').toggle();
}

// Quick Look

function showQuickLook(obj){
Element.addClassName(obj, 'quickLookBox');
}

function hideQuickLook(obj){
Element.removeClassName(obj, 'quickLookBox');
}

// Featured Products

function featuredToggle(){
Effect.toggle('featuredBox','appear');
$('featured').toggleClassName('featuredOpen');
}

// Refine Search Results

function openCloseRefine(){
$('refineResults').toggle();
$('controlArrow').toggleClassName('controlArrowUp');
$('sort-per-page').toggle();
}

// Why Robern

function getTab(obj){
	var originalTitle = $('whyTabs').className;
	var imageTitle = obj.title;
	$('whyTabs').className = imageTitle;
	$(originalTitle).toggle();
	$(imageTitle).toggle();
}

// Room Gallery

function roomLoad(obj){
	var imageTitle = obj.title;
	var contentTitle = obj.title + '-text';
    var altText = $(obj).childElements()[0].alt;
    if (altText == null ||  altText == "") {
        altText = "Room Scene Image";
    }
    var largeImage = '<img src="' + contextPath + '/images/room/' + imageTitle + '.jpg" alt="' + altText + '" title="' + altText + '"/>';
	$('largeImage').innerHTML = largeImage;
	$('featuredContent').innerHTML = $(imageTitle).innerHTML;
	$('roomContent').innerHTML = $(contentTitle).innerHTML;
}

// Toggle Search Options

function toggleSearchOptions(){
Effect.toggle('moreSearchOptions','slide');

$('optionsController').toggleClassName('fewerOptions');
};

// Toggle Search Options For Category

function toggleSearchOptionsForCategory(categoryName){

Effect.toggle('moreSearchOptions-'+categoryName,'slide');
$('optionsController-'+categoryName).toggleClassName('fewerOptions');
};


// Quick Finder Product Matches

function getProductMatches(){
    
    //Store old action
	//var action = $('quickFinderForm').action;
	//$('quickFinderForm').action = base_url;
    
    //Reset search box
    if (eval($('searchTerm')))
    {
    	//Determine whatdefault search text to display
    	if ($('category').type == "select-one")
    		$('searchTerm').value = "Enter Product # or Name";
    	else
    		$('searchTerm').value = "Search again";
    	
    	//Disable search box
    	$('searchTerm').disable();
	}
	
	//Serialize form elements and add to AJAX request
	var url = base_url + "?" + Form.serializeElements($('quickFinderForm').getElements());

    //Reset search box
    if (eval($('searchTerm')))
    	$('searchTerm').enable();
    	
    //Make Ajax POST request
	new Ajax.Request(url, {
	  method: 'post',
	  onCreate: disableForm("quickFinderForm" , true),
	  onSuccess: getAjaxQuickFinderInfo  
  	});

	//COMMENTED OUT BECAUSE WE COULDN'T FIGURE OUT HOW TO DISABLE FORM ELEMENTS BEFORE CREATING REQUEST
    //TODO define onError action
    //Make Ajax request
	//$('quickFinderForm').request({
	//  onSuccess:  getAjaxQuickFinderInfo  clea
  //	});
  	
  	//Update to old action for form
  	//$('quickFinderForm').action = action;

}

function disableForm(id, disableCategory) {
    var form = $(id);

	//Loop through form and disable checkboxes and dropdowns
    for (var i = 0; i < form.elements.length; i++) {
        if ((form.elements[i].type == 'checkbox' || form.elements[i].type == 'select-one') && !form.elements[i].disabled) {
            if (disableCategory || form.elements[i].id != 'category') {
                form.elements[i].disable();
            }
        }
    }
}

function getAjaxQuickFinderInfo(jsonResponse) {
	var results = jsonResponse.responseText;
	//Get json results
	if (results != null)
	{
	   // Turn JSON into object
	   results = eval('(' + results + ')');//Object.toJSON(results);
	
	   //Get product quickfinder form
	   var pqForm = $('quickFinderForm');
	   
	   //Update product matches
	   if (results != null)
	   {
	   
	       //Product Matches
	       if (results.productMatches.length > 0)
	       {    
	          $('productMatches').update(results.productMatches[0] + ' ' + $('ajaxResultType').innerHTML + ' Matches');
	          $('productMatches').show();
	       }

	        //Loop through form and update selections available
	        for ( var i = 0; i < pqForm.elements.length; i++ )
	        {
	          //alert("element"+i+pqForm.elements[i].id+pqForm.elements[i].type);
	          if(pqForm.elements[i].type == 'checkbox' || pqForm.elements[i].type == 'select-one')
	          {
	          
	               //Get json object for form elements
	               var map = "results." + pqForm.elements[i].name;
	               
	               if (pqForm.elements[i].id == 'category')
	                   pqForm.elements[i].enable();
	               else if (pqForm.elements[i].name+"-"+getCategoryValue() == pqForm.elements[i].id)
		           {
		           		updateFormElementsWithJson( eval(map) , pqForm.elements[i].id);
				   }
				   else
	               {
	               		//Check if dropdown div should be disabled
	               		if ($("div-"+pqForm.elements[i].id))
	               		{
	               			pqForm.elements[i].value = null;
	               			$("div-"+pqForm.elements[i].id).hide();
	               		}
	               		
	               		//Check if checkbox div should be disabled
	               		if ($("check-boxes-"+pqForm.elements[i].id))
	               		{
	               			pqForm.elements[i].checked = null;
	               			$("check-boxes-"+pqForm.elements[i].id).hide();
	               		}

	               }
	           }
	    	}

	    }
	 }
}

function updateFormElementsWithJson(jsonResult, id)
{

    var optionsRemoved = RemoveOptions($(id));
    
    if (optionsRemoved == true && typeof(jsonResult) != 'undefined')
    { 
	    for (var i = 0; i < jsonResult.length; i++ )
	    {
	        if($(id).type == 'checkbox')
	        {
	            if (jsonResult[i] != null && (jsonResult[i] == "Yes" || (id == 'decorativeOptions-Cabinets' && jsonResult[i] == 'Decorative')))
	            {	
	            	$(id).enable();
	            	//alert("show:" +"check-boxes-"+id);
	            	if($("check-boxes-"+id))
	            		$("check-boxes-"+id).show();
	            }
	            else if (i == 0)
	            {	
	            	$(id).disable();
	            	if($("check-boxes-"+id))
	            		$("check-boxes-"+id).show();
	            }
	            else
	            	id = id;
	        }
	        if ($(id).type == 'select-one')
	        {           
	           var myNewOption = new Option(jsonResult[i], jsonResult[i]);
	           InsertNewOption(myNewOption, $(id));
	        }
	    }
    }
    
  	if ($(id).type == 'select-one')
    { 
    	var selectElement = $(id);
    	if (selectElement.options.length == 1)
     	{
  	 		selectElement.disable();
			if($("div-"+id))
     			$("div-"+id).show();
       		selectElement[0].selected = true;
     	}
     	else
     	{
     		selectElement.enable();
     		//alert("show:" +"div-"+id);
			if($("div-"+id))
     			$("div-"+id).show();
		}
	}
}

function InsertNewOption(newOption, selectElement)
{
    var optsLen = selectElement.options.length;
    selectElement.options[optsLen] = newOption;

    return optsLen;
}

function RemoveOptions(selectElement)
{
    var removeOptions = true;
    var deleteArray = [];
    var selected = 0;
    if (selectElement.type == 'select-one')
    {
	    //Remove options if drop down is at index 0 and selected
	    for (var optionId = 0; optionId < selectElement.options.length; optionId++)
	    {
			//Check if we need to remove selections
			if(selectElement[optionId].selected)
				selected = optionId;
			else if (optionId>0)
          		deleteArray[deleteArray.length] = optionId;
          	else
          		selected = selected;
        } 

       	//Delete options
        for (var i=0; i<deleteArray.length; i++) 
        {
    		selectElement.remove(deleteArray[i]-i);
        }
        //alert("selected:"+selected);
		if (selected > 0)
			removeOptions = false;

	 }
	 
	 return removeOptions;
}

//Global categoryValue
//var categoryValue = "";

function getCategoryValue()
{

	//if (categoryValue != "")
	//	return categoryValue;
	var categoryValue = "";
	if ($('category').type == 'select-one')
    {
    	var selectElement = $('category');
	    //Remove options if drop down is at index 0 and selected
	    for (var optionId = 0; optionId < selectElement.options.length; optionId++)
	    {
	    	if(selectElement[optionId].selected && optionId > 0)
	    	{
	    		categoryValue = selectElement[optionId].value;
	    		break;
	    	}
	    }
	}
	else
		categoryValue = $('category').value;
		
		
	return categoryValue;
		
}

function switchCategory()
{
	disableForm("quickFinderForm" , false);
	toggleViewMoreOptionsForCategory();
	getProductMatches();
}

function toggleViewMoreOptionsForCategory()
{
	if ($('category').type == 'select-one')
    {
    	var selectElement = $('category');
	    //Update view more options
	    for (var optionId = 0; optionId < selectElement.options.length; optionId++)
	    {
	    	if(selectElement[optionId].selected)
	    	{
	    		if($('optionsController'+"-"+selectElement[optionId].value))
	    			$('optionsController'+"-"+selectElement[optionId].value).show();
	    	}
	    	else
	    	{
	    		if($('optionsController'+"-"+selectElement[optionId].value))
	    			$('optionsController'+"-"+selectElement[optionId].value).hide();
	    	}
	    }
	}
}


//Paging control for Results page

function getResultsPage(htmlElement)
{
	var pqForm = $('quickFinderForm');
   	var pageSize = $('paging.pageSize');
   	var pageIndex = $('paging.pageIndex');

	if (htmlElement.type == "select-one")
	{
	    //Loops through options
	    for (var optionId = 0; optionId < htmlElement.options.length; optionId++)
	    {
	    	if(htmlElement[optionId].selected)
	    	{
			   	//Update hidden field for page size
			   	if (eval(pageSize))
	   			{
	   				pageSize.value = htmlElement[optionId].value;
	   				
	   				//Reset page index
	   				if(eval(pageIndex))
   						pageIndex.value = 1;
	   			}	
	   			//Submit form
	   			clearSearchBox();		
	   			pqForm.submit();
	    	}	
	    		
	    }
   	}
   	else
   	{
   		//Update hidden field for page index
	   	if (eval(pageIndex))
   		{
   			pageIndex.value = htmlElement.innerHTML;
   			//Submit form
   			clearSearchBox();		
   			pqForm.submit();
   		}
   	}
}

//Next/Prev Arrow Paging control for Results page

function getArrowPage(index)
{
	var pqForm = $('quickFinderForm');
   	var pageIndex = $('paging.pageIndex');
   	
	if(eval(pageIndex))
		pageIndex.value = index;
   			
   	//Submit form
   	clearSearchBox();	
   	pqForm.submit();
}

//Paging control reset when submitting refined criteria

function resetPaging()
{
   	var pageSize = $('paging.pageSize');
   	var pageIndex = $('paging.pageIndex');
   	
   	if(eval(pageIndex))
		pageIndex.value = 1;
		
	if (eval(pageSize))
		pageSize.value = 10;
}


//Sort by control for Results Page

function sortResults(htmlElement)
{
	var pqForm = $('quickFinderForm');
   	var sortBy = $('paging.sortBy');

	if (htmlElement.type == "select-one")
	{
	    //Loops through options 
	    for (var optionId = 0; optionId < htmlElement.options.length; optionId++)
	    {
	    	if(htmlElement[optionId].selected)
	    	{
			   	//Update hidden field for page size
			   	if (eval(sortBy))
	   			{
	   				sortBy.value = htmlElement[optionId].value;
	   				
   				   	//Reset paging
   					var pageIndex = $('paging.pageIndex');
   	
				   	if(eval(pageIndex))
						pageIndex.value = 1;
	   			}	
	   			//Submit form
	   			clearSearchBox();		
	   			pqForm.submit();
	    	}	
	    		
	    }
   	}
}

/*
 * Adds an add to compare tooltip to a link.
 */
function addCompareToolTip(elementId) {
    element = $(elementId);
    if(element){
    new Tip(element,
            'Adding product to compare...',
             {title : 'Item Added',
              ajax: { url: element.href },
              className: 'pinktip',
              showOn: 'click',
              hideAfter: 3,
              hideOn: { element: '.close', event: 'click'},
              closeButton: true,
              hook: { target: 'topRight', tip: 'topRight' },
              offset: { x: 0, y: -5 }
             });

    element.observe('prototip:hidden',
                    function() {
                        //alert("Removing from " + this.id);
                        this.prototip.remove();
                        addCompareToolTip(this);
                    });
   }
}

// Remove from compare
function removeFromCompare(element) {
    var url = element.href;

    new Ajax.Request(url,
                     {method: 'get',
                      onSuccess: function(jsonResponse) {

        var message = "There was an error removing the product.";
        var response = jsonResponse.responseText;

        //Get json results
	    if (response != null) {
	        // Turn JSON into object
	        response = eval('(' + response + ')');//Object.toJSON(results);

            // Populate prototip
            if (response != null && response.result == 'SUCCESS') {
                var classId = ".compareProd-" + element.id.substring("removeProduct".length);
                var elements = $$(classId);

                for(var i=0; i < elements.length; i++) {
                    elements[i].remove();
                }

                if(response.message < 2) {
                    updateCompareLinks(false);
                }

                return;
            }
        }

        alert("There was an issue removing the item from compare");
      }
     });
}

var compareClickObserver = this.compareOnClick.bindAsEventListener(this);

function updateCompareLinks(canCompare) {
    var compareLinks;

    if(opener) {
        compareLinks = opener.$$('.compare-'+(canCompare?'off':'on'));
    } else {
        compareLinks = $$('.compare-'+(canCompare?'off':'on'));
    }

    for(var i=0; i<compareLinks.length; i++) {
        if(canCompare) {
            compareLinks[i].className = 'compare-on';

            compareLinks[i].observe("click", compareClickObserver);
        } else {
            compareLinks[i].className = 'compare-off';
            if(opener) {
                compareLinks[i].stopObserving("click", opener.compareClickObserver);
            } else {
                compareLinks[i].stopObserving("click", compareClickObserver);
            }
        }
    }

    if(opener) {
        compareLinks = opener.$$('.detail-compare-'+(canCompare?'off':'on'));
    } else {
        compareLinks = $$('.detail-compare-'+(canCompare?'off':'on'));                                                                                                                  
    }
    
    for(var i=0; i<compareLinks.length; i++) {
        if(canCompare) {
            compareLinks[i].className = 'detail-compare-on';

            compareLinks[i].observe("click", compareClickObserver);
        } else {
            compareLinks[i].className = 'detail-compare-off';

            if(opener) {
                compareLinks[i].stopObserving("click", opener.compareClickObserver);
            } else {
                compareLinks[i].stopObserving("click", compareClickObserver);
            }
        }
    }
}

function compareOnClick(event) {
    popCompareWindow(event.target);
}


// Load Help text
function createHelpTextTip(id, title, message) {
     new Tip(id,
         message,
         {title : title,
	      showOn: 'click',
	      className: 'pinktip',
	      hideOn: { element: '.close', event: 'click'},
	      closeButton: true,
	      hook: { target: 'topRight', tip: 'topRight' },
	      offset: { x: 0, y: -5 }
         });

}

//Form submit
function quickFinderSubmit()
{
	clearSearchBox();
	
	//Disable form if search box is filled
	if (eval($('searchTerm')) && $('searchTerm').value!="")
		disableForm("quickFinderForm" , true);
}


//Clear search box
function clearSearchBox()
{
	if (eval($('searchTerm')) && ($('searchTerm').value=="Enter Product # or Name" || $('searchTerm').value=="Search again")) 
		$('searchTerm').value="";
}




//OnChange Check For Occupation, Show text box if Other is selected , hide and clear text box if not
function onOccupationSelect(roleSelect) {
    var occupation = roleSelect.value;

    // Get the value for ie6
    if (occupation == "") {
        occupation = roleSelect.options[roleSelect.selectedIndex].text;
    }

    if(null == occupation) {
        return;
    }

    valid.reset();

    // Show or hide text box
    if (occupation == "Other") {
        $('otherRoleLabel').update("*Please enter your role here:");
        $('role').show();
        $('role').enable();

        if ($('title')) {
            $('titleLabel').update("Title");
            $('title').className = '';
        }
        if ($('company')) {
            $('companyLabel').update("Company");
            $('company').className = '';
        }
    } else {
        $('otherRoleLabel').update("");
        $('role').value = "";
        $('role').hide();
        $('role').disable();

        if (occupation == "Consumer / Homeowner" || occupation == "") {
            $('titleLabel').update("Title");
            $('title').className = '';
            $('companyLabel').update("Company");
            $('company').className = '';
        } else {
            if ($('title')) {
                $('titleLabel').update("*Title");
                $('title').className = 'required';
            }
            if ($('company')) {
                $('companyLabel').update("*Company");
                $('company').className = 'required';
            }
        }

    }
}

/*
 * Opens a popup window for comparing products.
 */
function popCompareWindow(element) {
    var compareWindow = new Object();
    
    compareWindow = window.open(element.href,
                                'myWindow',
                                'status = 0, height = 760px, width = 1020px, resizable = 1, scrollbars = 1');

    if(!compareWindow.opener) {
        compareWindow.opener = self;
    }

    compareWindow = null;

    // Close any open tips
    for(var i=0; i < Tips.tips.length; i++) {
        if(Tips.tips[i].wrapper.visible()) {
            Tips.tips[i].hide();
        }
    }
    for(var i=0; i < Tips.tips.length; i++) {
        if(Tips.tips[i].wrapper.visible()) {
            Tips.tips[i].hide();
        }
    }
}

// Generic Rollover images
(function($) {
    $(document).ready(function() {
        $("img.rollover").hover(
            function() {
                rollover(this);
            }, function() {
                unRollover(this);
            }
        );
        $("area.rollover").mouseover(function() {
            var img = $("img[usemap='#" + $(this).parent().attr("name") + "']");
            rollover(img);
        }).mouseout(function() {
            var img = $("img[usemap='#" + $(this).parent().attr("name") + "']");
            unRollover(img);
        });
        $("area.rollover1").mouseover(function() {
            var img = $("img[usemap='#" + $(this).parent().attr("name") + "']");
            rollover(img, "1");
        }).mouseout(function() {
            var img = $("img[usemap='#" + $(this).parent().attr("name") + "']");
            unRollover(img);
        });
        $("area.rollover2").mouseover(function() {
            var img = $("img[usemap='#" + $(this).parent().attr("name") + "']");
            rollover(img, "2");
        }).mouseout(function() {
            var img = $("img[usemap='#" + $(this).parent().attr("name") + "']");
            unRollover(img);
        });
    });

    function rollover(img, rolloverState) {
        if (rolloverState == null) {
            rolloverState = "";
        }
        var src = $(img).attr("src");
        if (src.lastIndexOf("_on") == -1) {
            var index = src.lastIndexOf(".");
            src = src.substring(0, index) + "_on" + rolloverState + src.substring(index, src.length);
            $(img).attr("src", src);
        }
    }

    function unRollover(img) {
        var src = $(img).attr("src");
        if (src.lastIndexOf("_on") > -1) {
            var index = src.lastIndexOf("_on");
            var endIndex = src.lastIndexOf(".");
            if (endIndex < index) {
                endIndex = index + 3;
            }
            src = src.substring(0, index) + src.substring(endIndex, src.length);
            $(img).attr("src", src);
        }
    }
})(jQuery);


