// JavaScript Document
// xClientWidth r5, Copyright 2001-2007 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL

function xWidth(e,w)
{
  	if(!(e=xGetElementById(e))) return 0;
  	if (xNum(w)) 
	{
   		if (w<0) w = 0;
    	else w=Math.round(w);
  	}
  	else w=-1;
  	var css=xDef(e.style);
  	if (e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
    	w = xClientWidth();
  	}
  	else if(css && xDef(e.offsetWidth) && xStr(e.style.width)) 
	{
    	if(w>=0) 
		{
      		var pl=0,pr=0,bl=0,br=0;
      		if (document.compatMode=='CSS1Compat') 
			{
        		var gcs = xGetComputedStyle;
        		pl=gcs(e,'padding-left',1);
        		if (pl !== null) 
				{
         			pr=gcs(e,'padding-right',1);
          			bl=gcs(e,'border-left-width',1);
          			br=gcs(e,'border-right-width',1);
        		}
        		// Should we try this as a last resort?
        		// At this point getComputedStyle and currentStyle do not exist.
        		else if(xDef(e.offsetWidth,e.style.width))
				{
          			e.style.width=w+'px';
          			pl=e.offsetWidth-w;
        		}
      		}
      		w-=(pl+pr+bl+br);
     		if(isNaN(w)||w<0) return;
      		else e.style.width=w+'px';
    	}
    	w=e.offsetWidth;
  	}
  	else if(css && xDef(e.style.pixelWidth)) 
	{
    	if(w>=0) e.style.pixelWidth=w;
    	w=e.style.pixelWidth;
  	}
  	return w;
}

function xHeight(e,h)
{
	if(!(e=xGetElementById(e))) return 0;
  	if (xNum(h)) {
    	if (h<0) h = 0;
    	else h=Math.round(h);
  	}
  	else h=-1;
  	var css=xDef(e.style);
  	if (e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
    	h = xClientHeight();
  	}
  	else if(css && xDef(e.offsetHeight) && xStr(e.style.height)) 
	{
    	if(h>=0) 
		{
      		var pt=0,pb=0,bt=0,bb=0;
      		if (document.compatMode=='CSS1Compat') 
			{
        		var gcs = xGetComputedStyle;
        		pt=gcs(e,'padding-top',1);
        		if (pt !== null) 
				{
          			pb=gcs(e,'padding-bottom',1);
          			bt=gcs(e,'border-top-width',1);
          			bb=gcs(e,'border-bottom-width',1);
        		}
        		// Should we try this as a last resort?
        		// At this point getComputedStyle and currentStyle do not exist.
        		else if(xDef(e.offsetHeight,e.style.height))
				{
          			e.style.height=h+'px';
          			pt=e.offsetHeight-h;
        		}
      		}
      		h-=(pt+pb+bt+bb);
      		if(isNaN(h)||h<0) return;
      		else e.style.height=h+'px';
    	}
    	h=e.offsetHeight;
  	}
  	else if(css && xDef(e.style.pixelHeight)) 
	{
    	if(h>=0) e.style.pixelHeight=h;
    	h=e.style.pixelHeight;
  	}
  	return h;
}

function xClientWidth()
{
  var v=0,d=document,w=window;
  if((!d.compatMode || d.compatMode == 'CSS1Compat') && !w.opera && d.documentElement && d.documentElement.clientWidth)
    {v=d.documentElement.clientWidth;}
  else if(d.body && d.body.clientWidth)
    {v=d.body.clientWidth;}
  else if(xDef(w.innerWidth,w.innerHeight,d.height)) {
    v=w.innerWidth;
    if(d.height>w.innerHeight) v-=16;
  }
  return v;
}

function xClientHeight()
{
  	var h=0,d=document,w=window;
  	if(d.compatMode == 'CSS1Compat' && !w.opera && d.documentElement && d.documentElement.clientHeight)
    {
		h=d.documentElement.clientHeight;
	}
  	else if(d.body && d.body.clientHeight)
    {
		h=d.body.clientHeight;
	}
  	else if(xDef(w.innerWidth,w.innerHeight,d.width)) 
	{
    	h=w.innerHeight;
    	if(d.width>w.innerWidth) h-=16;
  	}
  	return h;
}
function xDef()
{
  for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;}
  return true;
}


function xGetElementById(e)
{
	if(typeof(e)=='string') 
	{
    	if(document.getElementById) e=document.getElementById(e);
    	else if(document.all) e=document.all[e];
    	else e=null;
  	}
  	return e;
}

function xNum()
{
  	for(var i=0; i<arguments.length; ++i){if(isNaN(arguments[i]) || typeof(arguments[i])!='number') return false;}
  	return true;
}

function xDef()
{
  	for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;}
  	return true;
}

function xStr(s)
{
  	for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])!='string') return false;}
  	return true;
}

function IsValidEmail(email)
{
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (filter.test(email)) 
	{
		return true;
	}
	else
	{
		return false;
	}
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}
