var Prototype=null

var plight= {
  Browser: {
    IE:     !!(window.attachEvent &&
      navigator.userAgent.indexOf('Opera') === -1),
    Opera:  navigator.userAgent.indexOf('Opera') > -1,
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 &&
      navigator.userAgent.indexOf('KHTML') === -1,
    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
  }
};

var Try = {
  these: function() {
    var returnValue;

    for (var i = 0, length = arguments.length; i < length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) { }
    }

    return returnValue;
  }
};

function $(element) {
   if (typeof element== "string") {
      element = document.getElementById(element);
   }
   return element;
}
var Position={ positionedOffset:positionedOffset,clone:clonePosition}
//var Object={clone:cloneObject}
var Event={pointerX:evtPointerX,pointerY:evtPointerY,observe:evtObserve,isLeftClick:isLeftClick,isMiddleClick:isMiddleClick,isRightClick:isRightClick,stop:evtStop,KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39, KEY_DOWN:40,KEY_DELETE:46,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45}

function evtPointer(event) {
   var docElement = document.documentElement,
   body = document.body || { scrollLeft: 0, scrollTop: 0 };
   return {
      x: event.pageX || (event.clientX +
          (docElement.scrollLeft || body.scrollLeft) -
          (docElement.clientLeft || 0)),
      y: event.pageY || (event.clientY +
          (docElement.scrollTop || body.scrollTop) -
          (docElement.clientTop || 0))
   }
}

function isButton(event,code) {
  if (plight.Browser.IE) {
    var buttonMap = { 0: 1, 1: 4, 2: 2 };
    return event.button == buttonMap[code];
  } else if (plight.Browser.WebKit) {
      switch (code) {
        case 0: return event.which == 1 && !event.metaKey;
        case 1: return event.which == 1 && event.metaKey;
        default: return false;
      }
  } else {
      return event.which ? (event.which === code + 1) : (event.button === code);
  }
}


function evtPointerX(event) { return evtPointer(event).x }
function evtPointerY(event) { return evtPointer(event).y }

function evtObserve(element,name,handler) {
   if (element.addEventListener) {
      element.addEventListener(name, handler, false);
   } else {
      element.attachEvent("on" + name, handler);
   }
}

function evtStop(event) {
   if (plight.Browser.IE) {
      event.returnValue=false;
      event.cancelBubble=true;
   } else {
      event.preventDefault();
      event.stopPropagation();
   }
   event.stopped = true;
}
function isLeftClick(event) { return isButton(event, 0) }
function isMiddleClick(event) { return isButton(event, 1) }
function isRightClick(event) { return isButton(event, 2) }

function clonePosition(source,target,opt) {
   target.style.left=opt.offsetLeft?opt.offsetLeft+"px":0
   target.style.top=opt.offsetTop?opt.offsetTop+"px":0
   target.style.width=source.offsetWidth+"px"
   target.style.height=source.offsetHeight+"px"
}

function cloneObject(obj) {
   var a,ret={}
   for (a in obj) {
      ret[a]=obj[a]
   }
   return ret
}

function positionedOffset(element) {
   var valueT = 0, valueL = 0;
   do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
      if (element) {
         if (element.tagName.toUpperCase() == 'BODY') break;
         if (element.style.position !== 'static' && element.style.position !== '') break;
      }
    } while (element);

    return [valueL, valueT]
}

var Ajax = {
  getTransport: function() {
    return Try.these(
      function() {return new XMLHttpRequest()},
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
    ) || false;
  },
  Request: function(url,options) {
     var req=Ajax.getTransport()
     if (req) {
        try {
         req.options=options
        } catch(e) {}
        req.onreadystatechange=function () {
            if (req.options) {
               if (req.readyState == 4 && req.options.onSuccess) {
                  (req.options.onSuccess)(req)
               }
            } else {
               if (req.readyState == 4 && options.onSuccess) {
                  (options.onSuccess)(req)
               }
            }
        }
        req.open(options.method.toUpperCase(),url);
        req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");        
        req.send(options.postBody);
     }
  }

};


