﻿// JSLint Config:
/*jslint browser: true */
/*global cc, jQuery */

//  
//  Author: Kevin Burkitt
//  Date:   2010-03-08
//
//  History Controller - provides deep link & back/forward support
//  to enable 'hijax' functionality
//
//  Uses jQuery Address Plugin (http://www.asual.com/jquery/address/)
//
cc.history = function() {

    var cc_class = '.cc-history';
    var target = 'body';

    return {

        init: function(t) {

            if (typeof t !== 'undefined') {
                target = t;
            }

            if (target === 'body') {
                // BIND ON PAGE LOAD ONLY (when no 'target' parameter)
                jQuery.address.internalChange(function(event) {
                    // cc.log('internalChange: ' + event.value);
                    if (event.value === '/') {
                        return;
                    }
                    cc.history.addressChange(event);
                });

                jQuery.address.externalChange(function(event) {
                    // cc.log('externalChange: ' + event.value);
                    if (event.value === '/') {
                        return;
                    }
                    cc.history.addressChange(event);
                });
            }

            // SET  cc-history
            jQuery('a.' + cc_class, jQuery(target)).each(function() {
                var update = jQuery(this).attr('cc:target');
                if (typeof update === 'undefined' || target === '') {
                    // target undefined - use value from first parent found with valid element
                    // (used by paging control; others as desired)
                    try {
                        update = jQuery(this).parents('[rel]').first().attr('rel');
                        jQuery(this).attr('cc:target', update);
                    } catch (e) { }
                }

                var url = jQuery(this).attr('cc:href');
                if (typeof url === 'undefined' || url === '') {
                    url = jQuery(this).attr('href');
                }

                jQuery(this).click(function() {
                    jQuery.address.value(update + ':' + url);
                    return false;
                });
            });

        },

        addressChange: function(event) {

            var selection = event.value.substring(event.value.indexOf(':') + 1);
      
            var target = event.value.substring(1, event.value.indexOf(':'));
            
        
            if (target === null) {
                return;
            }

            cc.ajax.load(target, cc.helpers.addQSParam(selection, 'format=ajax'));

        }

    };

} ();
