YAHOO.namespace('LSM');

LSM.Cellular  = function () {

    var initSearchForm = function() {
        // get all the inputs and iterate through each corresponding "box"
        // element disabling each form select that is not being shown
        var nodes = YAHOO.util.Selector.query('#content form.shop label input');
        
        YAHOO.util.Dom.batch(nodes, function(el) {
            var box_el = YAHOO.util.Dom.get(el.id + '-box');
            var display = YAHOO.util.Dom.getStyle(box_el, 'display');
            if (display == 'none') {
                var selects = YAHOO.util.Selector.query('select', box_el);
                YAHOO.util.Dom.batch(selects, function(el) {
                    el.disabled = true;
                });
            }
        });
          
        YAHOO.util.Event.addListener(nodes, 'click', function(e) {
            // cory hasn't discovered YAHOO.util.Dom.batch()
            for (var node in nodes) {
                YAHOO.util.Dom.setStyle(nodes[node].id + '-box', 'display', 'none');
                
                // disable all selects in the element 'box' element
                var selects = YAHOO.util.Selector.query('select', nodes[node].id + '-box');
                YAHOO.util.Dom.batch(selects, function(el) {
                    el.disabled = true;
                });
                
            }
            
            YAHOO.util.Dom.setStyle(e.target.id + '-box', 'display', 'block');
            
            // enable the active select
            var active_selects = YAHOO.util.Selector.query('select', e.target.id + '-box');
            YAHOO.util.Dom.batch(active_selects, function(el) {
                el.disabled = false;
            });
        });
    }

	var initSearchResultNav = function() {
		var nodes = YAHOO.util.Selector.query('#categories-box select');
		
		YAHOO.util.Event.addListener(nodes, 'change', function(e) {
			YAHOO.util.Event.stopEvent(e);
			var form = YAHOO.util.Dom.getAncestorByTagName(YAHOO.util.Event.getTarget(e), 'form');
			form.submit();
		});
	}
    
    var initResultDetails = function() {
        var nodes = YAHOO.util.Selector.query('span.details a.plan');
        
        YAHOO.util.Event.addListener(nodes, 'click', function(e) {
            YAHOO.util.Event.stopEvent(e);
            var row = document.getElementById(e.target.id + '-details-row');
            var details = document.getElementById(e.target.id + '-details');
            
            var populateDetails = function(response) {
                details.innerHTML = response;
            };
            
            var params = 'type=' + e.target.type + '&id=' + e.target.id;
            
            var AjaxObject = {
                handleSuccess:function(o) {
                    populateDetails(o.responseText);
                },
                handleFailure:function(o) {
                    //console.log(o);
                },
                processResult:function(o) {
                    //console.log(o);
                },
                startRequest:function() {
                    if ('' == details.innerHTML) {
                        populateDetails('Please wait...');
                        YAHOO.util.Connect.asyncRequest('POST', 'category/cell-phones/search/details', callback, params);
                    }
                }
            }
            
            var callback = {
                success:AjaxObject.handleSuccess, 
                failure:AjaxObject.handleFailure, 
                scope:AjaxObject 
            }
            
            if ('none' == row.style.display) {
                AjaxObject.startRequest();
                row.style.display = 'table-row';
                e.target.innerHTML = 'Hide Details';
            } else {
                row.style.display = 'none';
                e.target.innerHTML = 'View Details';
            }
        });
    }

    return {
        init: function() {
            var loader = new YAHOO.util.YUILoader({
                loadOptional: false,
                skin: false,
                onSuccess: function() {
                    initSearchForm();
		            initResultDetails();
					initSearchResultNav();
                }
            });
            
            loader.require('selector', 'connection');
            loader.insert({}, 'js');
        }
    }

}();

YAHOO.util.Event.onDOMReady(LSM.Cellular.init);