/* start module: browser */
browser = $pyjs.loaded_modules["browser"] = function (__mod_name__) {
if(browser.__was_initialized__) return browser;
browser.__was_initialized__ = true;
if (__mod_name__ == null) __mod_name__ = 'browser';
var __name__ = browser.__name__ = __mod_name__;
browser.Element = (function(){
	var cls_instance = pyjs__class_instance('Element');
	var cls_definition = new Object();
	cls_definition.__md5__ = '4431dc790a4b9dcba92c566b738b93af';
	cls_definition.__init__ = pyjs__bind_method(cls_instance, '__init__', function(tag, element) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			tag = arguments[1];
			element = arguments[2];
		}
		if (typeof tag == 'undefined') tag=null;
		if (typeof element == 'undefined') element=null;

		if (pyjslib.bool((tag !== null))) {

            this.element = $doc.createElement(tag);
            
		}
		else if (pyjslib.bool((element !== null))) {
			self.element = element;
		}
		else {
			throw (pyjslib.Exception(String('Cannot create Element without tag or element')));
		}
		self.element.__ref = self;
		self.activeEvents = new pyjslib.List([]);
		return null;
	}
	, 1, [null,null,'self', 'tag', 'element']);
	cls_definition.append = pyjs__bind_method(cls_instance, 'append', function(element) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			element = arguments[1];
		}


        this.element.appendChild(element.element);
        
	}
	, 1, [null,null,'self', 'element']);
	cls_definition.prepend = pyjs__bind_method(cls_instance, 'prepend', function(element) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			element = arguments[1];
		}


        this.element.insertBefore(element.element, self.element.firstChild);
        
	}
	, 1, [null,null,'self', 'element']);
	cls_definition.getX = pyjs__bind_method(cls_instance, 'getX', function() {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
		}


        var obj = this.element;
	    var curleft = 0;
    	if (obj.offsetParent) {
	    	curleft = obj.offsetLeft
		    while (obj = obj.offsetParent) {
			    curleft += obj.offsetLeft
		    }
	    }
	    return curleft;
        
	}
	, 1, [null,null,'self']);
	cls_definition.getY = pyjs__bind_method(cls_instance, 'getY', function() {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
		}


        var obj = this.element;
	    var curtop = 0;
    	if (obj.offsetParent) {
	    	curtop = obj.offsetTop
		    while (obj = obj.offsetParent) {
			    curtop += obj.offsetTop
		    }
	    }
	    return curtop;
        
	}
	, 1, [null,null,'self']);
	cls_definition.getWidth = pyjs__bind_method(cls_instance, 'getWidth', function() {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
		}


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


        return this.element.offsetHeight;
        
	}
	, 1, [null,null,'self']);
	cls_definition.setWidth = pyjs__bind_method(cls_instance, 'setWidth', function(width) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			width = arguments[1];
		}

		self.setStyle(String('width'), width);
		return null;
	}
	, 1, [null,null,'self', 'width']);
	cls_definition.setHeight = pyjs__bind_method(cls_instance, 'setHeight', function(height) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			height = arguments[1];
		}

		self.setStyle(String('height'), height);
		return null;
	}
	, 1, [null,null,'self', 'height']);
	cls_definition.setStyle = pyjs__bind_method(cls_instance, 'setStyle', function(property, value) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			property = arguments[1];
			value = arguments[2];
		}


        this.element.style[property] = value;
        
	}
	, 1, [null,null,'self', 'property', 'value']);
	cls_definition.setPxStyle = pyjs__bind_method(cls_instance, 'setPxStyle', function(property, value) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			property = arguments[1];
			value = arguments[2];
		}

		self.setStyle(property, pyjslib.sprintf(String('%dpx'), value));
		return null;
	}
	, 1, [null,null,'self', 'property', 'value']);
	cls_definition.setPercentStyle = pyjs__bind_method(cls_instance, 'setPercentStyle', function(property, value) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			property = arguments[1];
			value = arguments[2];
		}

		self.setStyle(property, pyjslib.sprintf(String('%d%%'), value));
		return null;
	}
	, 1, [null,null,'self', 'property', 'value']);
	cls_definition.getStyle = pyjs__bind_method(cls_instance, 'getStyle', function(property) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			property = arguments[1];
		}


        return this.element.style[property];
        
	}
	, 1, [null,null,'self', 'property']);
	cls_definition.setProperty = pyjs__bind_method(cls_instance, 'setProperty', function(property, value) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			property = arguments[1];
			value = arguments[2];
		}


        //this.element.setAttribute(property,value);
        this.element[property] = value;
        
	}
	, 1, [null,null,'self', 'property', 'value']);
	cls_definition.getProperty = pyjs__bind_method(cls_instance, 'getProperty', function(property) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			property = arguments[1];
		}


        //return this.element.getAttribute(property);
        return this.element[property];
        
	}
	, 1, [null,null,'self', 'property']);
	cls_definition.setHTML = pyjs__bind_method(cls_instance, 'setHTML', function(content) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			content = arguments[1];
		}


        this.element.innerHTML = content;
        
	}
	, 1, [null,null,'self', 'content']);
	cls_definition.getHTML = pyjs__bind_method(cls_instance, 'getHTML', function() {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
		}


        return this.element.innerHTML;
        
	}
	, 1, [null,null,'self']);
	cls_definition.catchEvents = pyjs__bind_method(cls_instance, 'catchEvents', function(name, object) {
		if (this.__is_instance__ === true) {
			var self = this;
		} else {
			var self = arguments[0];
			name = arguments[1];
			object = arguments[2];
		}


        var tmp = function(e) {
            if (!e) var e = $wnd.event;
        	if (e.target) targ = e.target;
	        else if (e.srcElement) targ = e.srcElement;
	        if (targ.nodeType == 3) targ = targ.parentNode;
            if (targ.__ref)
                object.dom_event(e, targ.__ref);
            else
                object.dom_event(e, null);
        };
        
		name = name.__getitem__(0);
		self.activeEvents.append(new pyjslib.Tuple([name, object]));

        var old_callback = this.element['on'+name];
        this.element['on'+name] = function(e){if(old_callback){old_callback(e);}tmp(e);};
        
	}
	, 1, [null,null,'self', 'name', 'object']);
	return pyjs__class_function(cls_instance, cls_definition, 
	                            new Array(pyjslib.object));
})();
browser.Document = (function(){
	var cls_instance = pyjs__class_instance('Document');
	var cls_definition = new Object();
	cls_definition.__md5__ = 'eb015eb8ac088a0c5b2bfd26a7d2bdf5';
	cls_definition.window = pyjs_kwargs_call(browser, 'Element', null, null, [{element:$wnd}])
	cls_definition.document = pyjs_kwargs_call(browser, 'Element', null, null, [{element:$doc}])
	cls_definition.body = pyjs_kwargs_call(browser, 'Element', null, null, [{element:$doc.body}])
	cls_definition.createElement = pyjs__bind_method(cls_instance, 'createElement', function(tag) {

		return browser.Element(tag);
	}
	, 0, [null,null,'tag']);
	cls_definition.append = pyjs__bind_method(cls_instance, 'append', function(element) {


        $doc.body.appendChild(element.element);
        
	}
	, 0, [null,null,'element']);
	cls_definition.setContent = pyjs__bind_method(cls_instance, 'setContent', function(message) {


        $doc.body.innerHTML = message;
        
	}
	, 0, [null,null,'message']);
	cls_definition.setTitle = pyjs__bind_method(cls_instance, 'setTitle', function(title) {


        $doc.title = title;
        
	}
	, 0, [null,null,'title']);
	return pyjs__class_function(cls_instance, cls_definition, 
	                            new Array(pyjslib.object));
})();
return this;
}; /* end browser */
$pyjs.modules_hash['browser'] = $pyjs.loaded_modules['browser'];


 /* end module: browser */


