
 function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof(element)=='string') { if(element = document.getElementById(element)) { } else { element=false; } } else {}
		if (arguments.length==1&&typeof(element)=='object') { return element; } else { return false; }
		elements.push(element);
	}
 return elements;
 }

 /////////////////////// Onload ///////////////////////////////////////////////////////////////////////////////

 function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	}
	else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
 }

function addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener) { 
            elm.addEventListener(evType, fn, useCapture); return true;
	} else if (elm.attachEvent) {
            var r = elm.attachEvent(("on"+evType), fn); return r;
	} else {
            elm[("on"+evType)] = fn; return true;
	}
}

function removeEvent( obj, type, fn ) {
  if ( obj.detachEvent ) {
    obj.detachEvent( 'on'+type, obj[type+fn] );
    obj[type+fn] = null;
  } else {
    obj.removeEventListener( type, fn, false );
  }
}

 /////////////////////// Object ///////////////////////////////////////////////////////////////////////////////

document.getElementsByClass = function (searchClass, tag, parentNode) {      
   var returnArray = [];
   tag = tag || '*';
   if( typeof(parentNode)=='object' && parentNode!=null ) { 
     var els = parentNode.getElementsByTagName(tag);
   } else {
     var els = this.getElementsByTagName(tag);
   }
   var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
   for (var i=0; i<els.length; i++) {
      if ( pattern.test(els[i].className) ) {
         returnArray.push(els[i]);
      } else {}
   }
   return returnArray;
}

 /////////////////////// Mouse/Position ///////////////////////////////////////////////////////////////////////
if(!window.Element) {
  Element = function(){}
  var __createElement = document.createElement;
  document.createElement = function(tagName) {
    var element = __createElement(tagName);
    for(var key in Element.prototype) {
      element[key] = Element.prototype[key];
    }
  return element;
  }
 
  var __getElementById = document.getElementById
  document.getElementById = function(id) {
    var element = __getElementById(id);
    for(var key in Element.prototype) {
        element[key] = Element.prototype[key]; 
    }
  return element;
  }
}

Element.prototype.scrollToX = function(x,n) {

  if(this.timeoutscrollx) { clearTimeout(this.timeoutscrollx); this.timeoutscrollx=false; } else { }
  var t = this.style.left; t = Math.ceil(t.substr(0,(t.length-2)));
  if(n){ } else { n = (x<t)?0:1; }
  if((n==0&&x<t)||(n==1&&t<x)) {
     var x = x; 
     var p = Math.ceil(Math.abs((Math.abs(x)-Math.abs(t)))/25);
     if(n==0) { this.style.left =(t-p)+"px"; } else { this.style.left =(t+p)+"px"; }
     this.timeoutscrollx = setTimeout("$('"+this.id+"').scrollToX("+x+","+n+")", 10); 
  } else {
     this.style.left =x+"px";
  }
}

Element.prototype.scrollToY = function(x,n) {
  if(this.timeoutscrolly) { clearTimeout(this.timeoutscrolly); this.timeoutscrolly=false; } else { }
  var t = this.style.top; t = Math.ceil(t.substr(0,(t.length-2)));
  if(n){ } else { n = (x<t)?0:1; }
  if((n==0&&x<t)||(n==1&&t<x)) {
     var x = x; 
     var p = Math.ceil(Math.abs((Math.abs(x)-Math.abs(t)))/25);
     if(n==0) { this.style.top =(t-p)+"px"; } else { this.style.top =(t+p)+"px"; }
     this.timeoutscrolly = setTimeout("$('"+this.id+"').scrollToY("+x+","+n+")", 10); 
  } else {
     this.style.top =x+"px";
  }
}

Element.prototype.getPosition = function() {
 var obj = this, x=0, y=0;
 while(obj) { x+=obj.offsetLeft; y+=obj.offsetTop; obj=obj.offsetParent; }
 obj = null; 
 return {x:x, y:y};
}

Element.prototype.toggle = function() {
 if(this.style.display!='none') { this.style.display = "none"; } else { this.style.display = (this.tagName=='div')?"block":""; }
 return true;
}

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return {x:scrOfX, y:scrOfY };
}

function getCurPosition(e) {
    e = e || window.event;
    var cursor = {x:0, y:0};
    if (e.pageX || e.pageY) {
        cursor.x = e.pageX;
        cursor.y = e.pageY;
    } else {
        var de = document.documentElement;
        var b = document.body;
        cursor.x = e.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
        cursor.y = e.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
    }
return cursor;
}



 /////////////////////// String ///////////////////////////////////////////////////////////////////////////////

String.prototype.trim = function() {
   return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
   return this.replace(/^\s+/g,"");
}
String.prototype.rtrim = function() {
   return this.replace(/\s+$/g,"");
}

String.prototype.stripTags = function() {
   return this.replace(/<([^>]+)>/g,'');
}

function showProperties(obj) {
  var result = "";
  for (var i in obj) { result += i+" = "+obj[i]+"\n"; }
  return result;
}

 /////////////////////// AJAX /////////////////////////////////////////////////////////////////////////////////

function ajaxObject(url, callbackFunction, xslt) {
  if(typeof(xslt)!='undefined') { var content_result=false; } else { var xslt=false; }
  var that=this;
  this.XSLT = false;
  this.updating = false;
  this.abort = function() {
    if (that.updating) {
      that.updating=false;
      that.AJAX.abort();
      that.AJAX=null;
    }
  }
  this.update = function(passData,postMethod) { 
    if (that.updating) { return false; }
    that.AJAX = null;
    if (window.XMLHttpRequest) {              
      that.AJAX=new XMLHttpRequest();              
    } else {                                  
      that.AJAX=new ActiveXObject("Microsoft.XMLHTTP");
    }                                             
    if(that.AJAX==null) {                             
      return false;                               
    } else {
      that.AJAX.onreadystatechange = function() {  
        if (that.AJAX.readyState==4) {             
          that.updating=false;  
          if(xslt&&typeof(xslt)=='string'&&xslt.length>0) { 
            if(content_result) {
              that.XSLT = that.AJAX.responseXML;
              that.XSLTrasnform(that.AJAX.responseXML,content_result.responseXML);
              content_result = null;
            } else {
              if(that.XSLT) {
                that.XSLTrasnform(that.XSLT,that.AJAX.responseXML);
              } else {
                content_result = {responseText:that.AJAX.responseText,status:that.AJAX.status,responseXML:that.AJAX.responseXML};
                if(xslt.indexOf('timestamp')==-1) { 
                   that.updating = new Date();
                   xslt+=((xslt.indexOf('?')==-1)?'?':'&')+'timestamp='+(that.updating.getTime()); 
                } else {}
                that.AJAX.open("GET", xslt, true); 
                that.AJAX.send(null);
              }
            }
          } else {
            that.callback(that.AJAX.responseText,that.AJAX.status,that.AJAX.responseXML);
            that.AJAX=null;
          }
        }                                                      
      }                                                        
      that.updating = new Date();
      if (/post/i.test(postMethod)) {
        var uri=urlCall+((urlCall.indexOf('?')==-1)?'?':'&')+that.updating.getTime();
        that.AJAX.open("POST", uri, true);
        that.AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        that.AJAX.send(passData);
      } else {
        var uri=urlCall+'?'+passData+'&timestamp='+(that.updating.getTime()); 
        that.AJAX.open("GET", uri, true);                             
        that.AJAX.send(null);                                         
      }              
      return true;                                             
    }                                                                           
  }
  var urlCall = url;        
  this.callback = callbackFunction || function () { };

  this.XSLTrasnform =  function(xslt_, xml_) { 
    var xslproc=false; var xmlproc=false; var xsldoc=false; var ie = false; 
    if( window.XSLTProcessor ) { xslproc = new XSLTProcessor(); } 
    else if (window.ActiveXObject) {
       ie = true; xslproc = new ActiveXObject("MSXML2.XSLTemplate");
                  xsldoc = new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
                  xmlproc = new ActiveXObject("MSXML2.DOMDocument");
    } else {}
    if(xslproc) {
      if(ie) {
          xmlproc.load(xml_); 
          xsldoc.load(xslt_); 
          xslproc.stylesheet = xsldoc; 
          xslproc = xslproc.createProcessor();
          xslproc.input = xmlproc; 
          xslproc.transform();
          var send_result = xslproc.output;
          that.callback(send_result);          
      } else {
          xslproc.importStylesheet(xslt_);
          var send_result = xslproc.transformToFragment(xml_, document);
          that.callback(send_result);          
      }
    } else {}
  }

}


 /////////////////////// Cookie ///////////////////////////////////////////////////////////////////////////////

function cookiesAllowed() {
   setCookie('checkCookie', 'test', 1);
   if (getCookie('checkCookie')) {
      deleteCookie('checkCookie');
      return true;
   }
   return false;
}


 function getCookie( name ) {
	var start = document.cookie.indexOf( name + "=" );
	var len = start + name.length + 1;
	if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
		return null;
	}
	if ( start == -1 ) return null;
	var end = document.cookie.indexOf( ';', len );
	if ( end == -1 ) end = document.cookie.length;
 return unescape( document.cookie.substring( len, end ) );
 }

 function setCookie( name, value, expires, path, domain, secure ) {
	var today = new Date();
	today.setTime( today.getTime() );
	if ( expires ) {
		expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date( today.getTime() + (expires) );
	document.cookie = name+'='+escape( value ) +
		( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
		( ( path ) ? ';path=' + path : '' ) +
		( ( domain ) ? ';domain=' + domain : '' ) +
		( ( secure ) ? ';secure' : '' );
 }

 function deleteCookie( name, path, domain ) {
	if ( getCookie( name ) ) document.cookie = name + '=' +
			( ( path ) ? ';path=' + path : '') +
			( ( domain ) ? ';domain=' + domain : '' ) +
			';expires=Thu, 01-Jan-1970 00:00:01 GMT';
 }

 /////////////////////// Browser ///////////////////////////////////////////////////////////////////////////////

function cancelEvent(e) {
  e = e?e:window.event;
  if(e.stopPropagation) { 
   e.stopPropagation();
  } else {
  if(e.preventDefault) {
    e.preventDefault();
  } else {}
    e.cancelBubble = true;
    e.cancel = true;
    e.returnValue = false;
  }
return false;
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

BrowserDetect.init();
