/*
var base = "http://yui.yahooapis.com/2.7.0/build/";

if ( "https:" == document.location.protocol ) { 
    base   = "https://ajax.googleapis.com/ajax/libs/yui/2.7.0/build/";
}

var loader = new YAHOO.util.YUILoader({
	base:			base,
    comboBase:      base,
	require:		yuireq,
	loadOptional:	false,
	combine:		false,
	filter:			'MIN',
	allowRollup:	true,

    skin: {
        base: 'assets/skins/',
        defaultSkin: 'sam',
        overrides: { 'tabview': [ 'magstabview' ] }
    },

	onSuccess: function() {
        //YAHOO.util.Event.onDOMReady(function() {
            page_loaded.fire({wu: 'tang'});
        //});
	}
});

loader.insert();
*/

YAHOO.util.Event.onDOMReady(function(ev) { 
    for ( var i = 0; i < page_loaded.length; i++ ) {
        page_loaded[i](ev);
    }
    setupPlaceholders();
});

function setupCarousel(name, numVisible, prevImg, nextImg) {
    var caro = new YAHOO.widget.Carousel(name + "-caro", {
        animation: { speed: 0.5 },
        numVisible: 3
    });
    var numItems   = caro.get("numItems"); 
    var pager = new YAHOO.widget.Paginator({
        rowsPerPage: 3,
        totalRecords: numItems
    });

    var prevPageDisplay = new YAHOO.widget.Paginator.ui.PreviousPageLink(pager); 
    pager.set('previousPageLinkLabel', '<img src="' +prevImg+ '" alt="More">');
    pager.set('nextPageLinkLabel', '<img src="' +nextImg+ '" alt="More">');

    YAHOO.util.Dom.get(name + '-prev').appendChild( 
        prevPageDisplay.render('pageDisplay')
    );
    var nextPageDisplay = new YAHOO.widget.Paginator.ui.NextPageLink(pager); 
    YAHOO.util.Dom.get(name + '-next').appendChild( 
        nextPageDisplay.render('pageDisplay')
    );

    pager.subscribe("changeRequest", function (state) { 
        YAHOO.util.Dom.removeClass(name + "_page" + (pager.getCurrentPage() - 1), 'activeSlide');
        YAHOO.util.Dom.addClass(name + "_page" + (state.page - 1), 'activeSlide');
        caro.scrollTo( ( state.page - 1 ) * numVisible );
        pager.setState(state); 
    }); 
    pager.on("pageChange", function (page) { 
        pager.setPage(page + 1, true); 
    }); 
    caro.render();
    caro.show();
    YAHOO.util.Event.addListener(name, 'click', function(e) {
        var tgt = YAHOO.util.Event.getTarget(e);
        var regex = new RegExp('^' + name + '_page');
        if ( tgt.tagName === 'A' && tgt.id.match(regex) ) {
            var page = parseInt(tgt.id.substr( name.length + 5 ));
            YAHOO.util.Event.preventDefault(e);
            pager.setPage( page + 1 );
        }
    });
}

function setupPlaceholders() {
    if (YAHOO.env.ua.webkit) return;

    function _closure(in_list) {
        return function(e) {
            var matching_inputs = in_list;
            for ( var j = 0; j < matching_inputs.length; j++ ) {
                if ( matching_inputs[j].value === matching_inputs[j].getAttribute('placeholder') )
                    matching_inputs[j].value = '';
            }
        };
    }

    var forms = document.getElementsByTagName('form');
    for ( var i = 0; i < forms.length; i++ ) {
        var inputs = forms[i].getElementsByTagName('input');
        var matching_inputs = [];
        for ( var j = 0; j < inputs.length; j++ ) {
            if ( inputs[j].type.toUpperCase() === 'TEXT' &&
                 inputs[j].getAttribute('placeholder') &&
                 inputs[j].getAttribute('placeholder').length > 0 &&
                 ( inputs[j].value === '' ||
                   inputs[j].value === inputs[j].getAttribute('placeholder') )
            ) {
                YAHOO.util.Dom.addClass(inputs[j], 'placeholder');
                inputs[j].value = inputs[j].getAttribute('placeholder');
                YAHOO.util.Event.on(inputs[j], 'focus', function() {
                    YAHOO.util.Dom.removeClass(this, 'placeholder');
                    if (this.value == this.getAttribute('placeholder')) {
                        this.value = '';
                    }
                }, true);
                YAHOO.util.Event.on(inputs[j], 'blur', function() {
                    if (this.value.length < 1) {
                        this.value = this.getAttribute('placeholder');
                        YAHOO.util.Dom.addClass(this, 'placeholder');
                    }
                }, true);
                matching_inputs.push(inputs[j]);
            }
        }
        if ( matching_inputs.length > 0 ) {
            // Setup different closures for each submission, so
            // we don't iterate over the forms again.  We
            // use the closure method to create a copy of
            // the matching_inputs array to use on the
            // submit event for clearing defaulted values.
            YAHOO.util.Event.on(forms[i], 'submit', _closure(matching_inputs));
        }
    }
}

function setupAutocomplete(settings) {
	var oDS = new YAHOO.util.XHRDataSource(settings.url);
	oDS.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
	oDS.doBeforeParseData = function(oReq, oRes){
		var raw = oRes.terms[1], suggestions = [];
		for (var i = 0; i < raw.length; i += 2) {
			suggestions.push({ title: raw[i] });
		}
		return { suggestions: suggestions };
	};
	oDS.responseSchema = {
		resultsList: "suggestions",
		fields: [{key:'title'}]
	};
	var oAC = new YAHOO.widget.AutoComplete('keyword', 'autocomplete', oDS);
	oAC.animVert = false;
	oAC.resultTypeList = false;
	oAC.formatResult = function(oResultData, sQuery, sResultMatch) {
		var sKey = sResultMatch;

		// Extract the part of the match that the user did not type
		var sKeyStart = sKey.substr(0, sQuery.length);
		var sKeyRemainder = sKey.substr(sQuery.length);
		var aMarkup = [sKeyStart,"<span style='font-weight:bold'>",sKeyRemainder,"</span>"];
		return (aMarkup.join(""));
	};

	// Submit form when an item is selected
	var itemSelectHandler = function() {
		document.getElementById('topsearch').submit();
	};

	oAC.itemSelectEvent.subscribe(itemSelectHandler);
}

