/**
 http://10.211.55.2/javascript/prototype.extend.1.0.0.js
 
 - created by y8
 - htcmix@gmail.com
 - modified: 08/07/27
 
*/

Element.addMethods({
	appendTo:function(element, parentElement) {
		return $(parentElement).appendChild($(element));
	},
	appendToBody:function(element) {
		return Element.appendTo(element, document.getElementsByTagName('body')[0]);
	},
  getElementsByHTML:function(element, html, index) {
		return document.getElementsByHTML(html, index, element);
	},
  hoverable: function(element) {
    element.observe('mouseover', function() {this.addClassName('hover');}, false);
    element.observe('mouseout' , function() {this.removeClassName('hover');}, false);
  },
  focusable: function(element) {
    element.observe('focus', function() {this.addClassName('focus');}, false);
    element.observe('blur' , function() {this.removeClassName('focus');}, false);
  }
});


var $B = Element.build = function(tagName, options) {
  options = options || {};
  var object = Element.extend(document.createElement(tagName));
  var value;
  for (property in options) {
    value = options[property];
    if (property == 'content') {
      if (typeof value == 'string' || ! value.length ) value = [value];
      value.each(function(node) {
          if (typeof node == 'string') node = document.createTextNode(node);
          object.appendChild(node);
        });
    }
    else if (property == 'style')
      object.setStyle(value);
    else if (property == 'class' || property == 'className')
      object.addClassName(value);
    else
      object.writeAttribute(property, value);
  }
  return object;
};

document.getElementsByHTML = function(html,index,parentElement) {
	var m = new RegExp("<([^ ]*) *([^=]*)=\"?([^ /]*)\" */?>").exec(html);
	var tags = ($(parentElement)||document.body).getElementsByTagName(m[1]);
	if(tags.length==0)return null;
	if(m[2]=="class")m[2]=document.all&&!window.opera?"className":"class";
	for(var i=0,elements=[];i<tags.length;i++){
		match=!(m[2]=="class"||m[2]=="className")?false:Element.hasClassName(tags[i],m[3])?true:false;
		if($(tags[i]).readAttribute(m[2])==m[3]||match){
			if(elements.length==index)return Element.extend(tags[i]);
			elements.push(Element.extend(tags[i]));}}
	if(elements.length==0)return null;
	if(Object.isUndefined(index))return elements;
	if(elements.length<=Math.abs(index))index=(index<0)?0:(elements.length-1);
	else if(index<0)index=elements.length+index;
	return elements[index];
};

document.getPageSize = function() {
  return {
    width: window.innerWidth + window.scrollMaxX ||
      document.body.scrollWidth ||
      document.body.offsetWidth,
    height: window.innerHeight + window.scrollMaxY ||
      document.body.scrollHeight ||
      document.body.offsetHeight
  };
}

// Positin extend
Object.extend(Position, {
  getWindowSize: function() {
    return {
      width: window.innerWidth ||
        document.documentElement.clientWidth ||
        document.body.clientWidth,
      height: window.innerHeight ||
        document.documentElement.clientHeight ||
        document.body.clientHeight
    };
  }
});

Object.extend(Object,{
	isDefined:function(object) {
    return typeof(object)!="undefined"&&object!=null;
  },
	isUndefined:function(object) {
    return !Object.isDefined(object);
  }
});

// Event extend
Object.extend(Event, {
	keyDown: function(event) {
		return event.charCode||event.keyCode||-1;
	}
});