/* start module: pyjamas.History */
pyjamas.History = $pyjs.loaded_modules["pyjamas.History"] = function (__mod_name__) {
if(pyjamas.History.__was_initialized__) return pyjamas.History;
pyjamas.History.__was_initialized__ = true;
if (__mod_name__ == null) __mod_name__ = 'pyjamas.History';
var __name__ = pyjamas.History.__name__ = __mod_name__;
var History = pyjamas.History;

 pyjslib.__import__(['pyjamas.sys', 'sys'], 'sys', 'pyjamas.History')
 pyjamas.History.sys = $pyjs.__modules__.sys
if (pyjslib.bool(!new pyjslib.List([String('mozilla'), String('ie6'), String('opera'), String('oldmoz'), String('safari')]).__contains__(pyjamas.History.sys.platform))) {
	pyjslib.__import__(['pyjamas.pyjamas.__pyjamas__.JS', 'pyjamas.pyjamas.__pyjamas__', 'pyjamas.__pyjamas__.JS', 'pyjamas.__pyjamas__'], 'pyjamas.__pyjamas__.JS', 'pyjamas.History')
	pyjamas.History.JS = $pyjs.__modules__.pyjamas.__pyjamas__.JS;
	pyjslib.__import__(['pyjamas.pyjamas.__pyjamas__.doc', 'pyjamas.pyjamas.__pyjamas__', 'pyjamas.__pyjamas__.doc', 'pyjamas.__pyjamas__'], 'pyjamas.__pyjamas__.doc', 'pyjamas.History')
	pyjamas.History.doc = $pyjs.__modules__.pyjamas.__pyjamas__.doc;
	pyjslib.__import__(['pyjamas.pyjamas.__pyjamas__.get_main_frame', 'pyjamas.pyjamas.__pyjamas__', 'pyjamas.__pyjamas__.get_main_frame', 'pyjamas.__pyjamas__'], 'pyjamas.__pyjamas__.get_main_frame', 'pyjamas.History')
	pyjamas.History.get_main_frame = $pyjs.__modules__.pyjamas.__pyjamas__.get_main_frame;
}
pyjamas.History.historyToken = String('');
pyjamas.History.historyListeners = new pyjslib.List([]);
pyjamas.History.History = (function(){
	var cls_instance = pyjs__class_instance('History');
	var cls_definition = new Object();
	cls_definition.__md5__ = 'ac1720f8a487eb43d26d1aaeaf472cad';
	cls_definition.addHistoryListener = pyjs__bind_method(cls_instance, 'addHistoryListener', function(listener) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			listener = arguments[1];
		}

		pyjamas.History.historyListeners.append(listener);
		return null;
	}
	, 1, [null,null,'self', 'listener']);
	cls_definition.back = pyjs__bind_method(cls_instance, 'back', function() {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
		}


        $wnd.history.back();
        
	}
	, 1, [null,null,'self']);
	cls_definition.forward = pyjs__bind_method(cls_instance, 'forward', function() {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
		}


        $wnd.history.forward();
        
	}
	, 1, [null,null,'self']);
	cls_definition.getToken = pyjs__bind_method(cls_instance, 'getToken', function() {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
		}

		return pyjamas.History.historyToken;

        return $wnd.__historyToken;
        
	}
	, 1, [null,null,'self']);
	cls_definition.newItem = pyjs__bind_method(cls_instance, 'newItem', function(historyToken) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			historyToken = arguments[1];
		}

		self.onHistoryChanged(historyToken);
		return null;

        if(historyToken == "" || historyToken == null){
            historyToken = "#";
        }
        $wnd.location.hash = encodeURIComponent(historyToken);
        
	}
	, 1, [null,null,'self', 'historyToken']);
	cls_definition.onHistoryChanged = pyjs__bind_method(cls_instance, 'onHistoryChanged', function(historyToken) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			historyToken = arguments[1];
		}

		self.fireHistoryChangedImpl(historyToken);
		return null;
	}
	, 1, [null,null,'self', 'historyToken']);
	cls_definition.fireHistoryChangedAndCatch = pyjs__bind_method(cls_instance, 'fireHistoryChangedAndCatch', function() {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
		}

 		return null;
	}
	, 1, [null,null,'self']);
	cls_definition.fireHistoryChangedImpl = pyjs__bind_method(cls_instance, 'fireHistoryChangedImpl', function(historyToken) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			historyToken = arguments[1];
		}
		var listener;
		var __listener = pyjamas.History.historyListeners.__iter__();
		try {
			while (true) {
				var listener = __listener.next();
				
				listener.onHistoryChanged(historyToken);
			}
		} catch (e) {
			if (e.__name__ != 'StopIteration') {
				throw e;
			}
		}
		return null;
	}
	, 1, [null,null,'self', 'historyToken']);
	cls_definition.removeHistoryListener = pyjs__bind_method(cls_instance, 'removeHistoryListener', function(listener) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			listener = arguments[1];
		}

		pyjamas.History.historyListeners.remove(listener);
		return null;
	}
	, 1, [null,null,'self', 'listener']);
	return pyjs__class_function(cls_instance, cls_definition, 
	                            new Array(pyjslib.object));
})();
pyjamas.History.init = function() {

	pyjamas.History.__historyToken = String('');
	pyjamas.History.History().onHistoryChanged(pyjamas.History.__historyToken);
	return null;

    $wnd.__historyToken = '';

    // Get the initial token from the url's hash component.
    var hash = $wnd.location.hash;
    if (hash.length > 0)
        $wnd.__historyToken = decodeURIComponent(hash.substring(1));

    // Create the timer that checks the browser's url hash every 1/4 s.
    $wnd.__checkHistory = function() {
        var token = '', hash = $wnd.location.hash;
        if (hash.length > 0)
            token = decodeURIComponent(hash.substring(1));

        if (token != $wnd.__historyToken) {
            $wnd.__historyToken = token;
            // TODO - move init back into History
            // this.onHistoryChanged(token);
            var h = new __History_History();
            h.onHistoryChanged(token);
        }

        $wnd.setTimeout('__checkHistory()', 250);
    };

    // Kick off the timer.
    $wnd.__checkHistory();

    return true;
    
};
pyjamas.History.init.__name__ = 'init';

pyjamas.History.init.__bind_type__ = 0;
pyjamas.History.init.__args__ = [null,null,];
pyjamas.History.init();
return this;
}; /* end pyjamas.History */
$pyjs.modules_hash['pyjamas.History'] = $pyjs.loaded_modules['pyjamas.History'];


 /* end module: pyjamas.History */


/*
PYJS_DEPS: ['sys', 'pyjamas.__pyjamas__.JS', 'pyjamas', 'pyjamas.__pyjamas__', 'pyjamas.__pyjamas__.doc', 'pyjamas.__pyjamas__.get_main_frame']
*/
