
/* array extensions -------------------------------------------------------- */

Array.prototype.indexOf = function(v){for(var i=this.length;i>-1;i--)if((typeof this[i]!='undefined') && (this[i] == v))return i; return -1};
Array.prototype.contains = function(v){return this.indexOf(v) > -1};
Array.prototype.deleteItem  = function(i){
  if(i<0||i>(this.length-1))return;
  if(i==(this.length-1))
  {this.length--; return;}
  for(var a=(i+1);a<this.length;a++){this[a-1]=this[a];}
  this.length--;
};
String.prototype.trim = function() {
  var s = this;  
  while ((s.substring(0,1) == ' ') || (s.substring(0,1) == '\n') || (s.substring(0,1) == '\r'))
  { s = s.substring(1,s.length); }
  while ((s.substring(s.length-1,s.length) == ' ') || (s.substring(s.length-1,s.length) == '\n') || (s.substring(s.length-1,s.length) == '\r'))
  { s = s.substring(0,s.length-1); }
  return s;
};
/* platform/browser sniffing  ---------------------------------------------- */
var cg = {};

// browser types
cg._bt    = ["Unknown","IExplore","Netscape","Mozilla","Chimera","Opera","Safari","Konqueror","Firefox"];
var btUnknown   = 0;
var btIExplore  = 1;
var btNetscape  = 2;
var btMozilla   = 3;
var btChimera   = 4;
var btOpera     = 5;
var btSafari    = 6;
var btKonqueror = 7;
var btFirefox   = 8;

// platform types
cg._pt    = ["Unknown","Windows","Macintosh","Linux","Unix"];
var ptUnknown   = 0;
var ptWindows   = 1;
var ptMacintosh = 2;
var ptLinux     = 3;
var ptUnix      = 4;
  
cg.browsersniff = function()
{
    var i,n,hasX;
    var u      = navigator.userAgent.toUpperCase();
    var v      = navigator.vendor;
    cg.platform = ptUnknown;
    cg.browser  = btUnknown;
    cg.major    = 0;
    cg.minor    = 0;
    // find platform
    var t = navigator.platform.toUpperCase().substr(0,3);
    if(t=="WIN")cg.platform = ptWindows;  else
    if(t=="MAC")cg.platform = ptMacintosh;else
    if(t=="LIN")cg.platform = ptLinux;    else
    if(t=="UNI")cg.platform = ptUnix;
    // find browser
    if(typeof window.opera != "undefined")cg.browser = btOpera;else // only opera has window.opera object
    if(u.indexOf("KONQUEROR")>0)cg.browser = btKonqueror;      else
    if(document.all)            cg.browser = btIExplore;       else // most likely IE
    if(v == "Firefox")          cg.browser = btFirefox;        else
    if(u.indexOf("SAFARI"   )>0)cg.browser = btSafari;         else
    if(typeof document.implementation != 'undefined' && 
       typeof document.implementation.createDocument != 'undefined')cg.browser = btMozilla; else  
    if(u.indexOf("CHIMERA"  )>0)cg.browser = btChimera;        else  
    if(u.indexOf("NETSCAPE" )>0)cg.browser = btNetscape;       else
    if(u.indexOf("GECKO"    )>0)cg.browser = btMozilla;  
    // find version
    var r = new RegExp("[\(\)\/\;\,\:]", "g");
    var uu = u.replace(r," ").split(" ");
    for(i=uu.length;i>-1;i--){
      uu[i] = String(uu[i]);
      n    = parseFloat(uu[i]);
      hasX = new RegExp("[xX]+");
      if(uu[i].search(new RegExp("[xX]+")) > -1)uu.deleteItem(i);
      else if(isNaN(n))uu.deleteItem(i);
      else if(n > 19)uu.deleteItem(i);
      else uu[i] = n; // for sorting
    }
    uu.sort();
    if(uu.length > 0){
      i = uu.length-1; // use largest number
      if(cg.browser == btMozilla || cg.browser == btFirefox)i = 0; // use smallest number
      uu      = String(uu[i]).split(".");
      cg.major = parseInt(uu[0]);
      if(uu.length>1)
        cg.minor = uu[1];
    }
    
    cg.isGecko  = (cg.browser == btMozilla || cg.browser == btChimera || cg.browser == btNetscape || cg.browser == btSafari || cg.browser == btFirefox);
    cg.isKHTML  = (cg.browser == btSafari || cg.browser == btKonqueror);
    cg.isIE     = (cg.browser == btIExplore);
    cg.isIEMac  = (cg.platform == ptMacintosh && cg.isIE);
    cg.isIE5    = (cg.isIE    && cg.major == 5);
    cg.isIE5Mac = (cg.isIEMac && cg.major == 5);
};
cg.browsersniff();
delete cg.browsersniff; 
cg.strict = function(){
  if(cg.isIE5Mac)return true;
  var r = false;
  var d = document.doctype;
  r     = (document.compatMode=="CSS1Compat");
  if(d){
    if(d.systemId)
      r = d.systemId.indexOf("strict")>-1;
    else if(d.publicId)
      r = d.publicId.indexOf("transitional")>-1;
  }
  r     = (d&&d.name.indexOf(".dtd")>-1)?true:r;
  return r;
};
cg.isStrict = cg.strict();
cg.needsBoxFix = (cg.isIE5)||(cg.isIE60 && !cg.isStrict);
delete cg.strict;

/* common utility stuff ---------------------------------------------------- */

cg.clamp = function(_x,_min,_max){_x=Number(_x);if(_x<_min)_x=_min;if(_x>_max)_x=_max;return _x;}

cg.addEvent = function(obj,evt,fn,capture)
{
  if(obj.addEventListener)
  {obj.addEventListener(evt,fn,capture);}
  else if(obj.attachEvent)
  {obj.attachEvent("on"+evt,fn);}
  else
  {obj["on"+evt] = fn;}
};
cg.preventBubble = function(E){
  if(cg.isIE){
    event.cancelBubble = true;
    event.returnValue  = false;
  }else{
    if(E.stopPropagation)E.stopPropagation();
    else E.preventBubble();
  }
};
cg.removeEvent = function(obj,evt,fn,capture)
{
  if(obj.removeEventListener)
  {obj.removeEventListener(evt,fn,capture);}
  else if(obj.detachEvent)
  {obj.detachEvent("on"+evt,fn);}
  else
  {obj["on"+evt] = null;}
};

cg.el = function(el)
{
    return document.getElementById(el);
};

cg.include = function(script)
{
    if (!cg.__scripts) { cg.__scripts = [];}
    
    if (cg.__scripts.indexOf(script)<0)
    {
        cg.__scripts.push(script);
        document.writeln('<script type="text\/javascript" src="'+script+'"><\/script>'); 
        return true;
    }
    return false;
};

cg.isNull = function(n)  {return n==null || !String(n).length};
cg.rInt   = function(n,d){return(cg.isNull(n)||isNaN(n))?((cg.isNull(d)||isNaN(d))?0:d):parseInt(n)};
cg.rVal   = function(s,d){return(cg.isNull(s)?(cg.isNull(d)?"":d):s)};                                 // return value if not nil else default
cg.luid   = function()   {return "L"+new Date().getTime()+Math.floor(1000 * Math.random());};

cg.boxValuesOut = function(s){
  if(cg.isNull(s) || isNaN(parseInt(s)))return [0,0,0,0];
  var a=s.split(" ");
  for(var i=0;i<a.length;i++)a[i]=parseInt(a[i]);
  switch(a.length){
    case 1:a[1]=a[0];a[2]=a[0];a[3]=a[0];break;
    case 2:a[2]=a[0];a[3]=a[1];break;
    case 3:a[3]=a[1];break;
  }
  return a;
};

cg.IFrameDoc = function(i)
{
    var o = new Object;
    o = cg.el(i);
    var d;
    if(cg.isIE5)d = o.document;
    else d = cg.isIE?o.contentWindow.document:o.contentDocument;
    return d;
};

cg.getTarget = function(E){return cg.isGecko?E.target:event.srcElement};

cg.scrollTop  = function(){return cg.isIE?(cg.isStrict?document.documentElement.scrollTop :document.body.scrollTop ):pageYOffset};
cg.scrollLeft = function(){return cg.isIE?(cg.isStrict?document.documentElement.scrollLeft:document.body.scrollLeft):pageXOffset};
cg.bodyWidth  = function(){return parseInt(cg.isIE?(!cg.isStrict?document.body.clientWidth: document.documentElement.clientWidth ):window.innerWidth)};
cg.bodyHeight = function(){return parseInt(cg.isIE?(!cg.isStrict?document.body.clientHeight:document.documentElement.clientHeight):window.innerHeight)};

if(cg.isGecko||cg.isIE5Mac)cg.include("/scripts/mozillaext.js");

cg.getNodeIndex = function(n){
  if(!n)return null;
  r = 0;
  var t = n.previousSibling;
  while(t){
    r++;
    t = t.previousSibling;
  }
  return r;
};
cg.transferElm = function(e,t){
  var temp = e.parentNode ? e.parentNode.removeChild(e) : e;
  t.insertAdjacentElement("beforeEnd",temp);
};
cg.insertElm = function(e,t,w){
  if(!e)return;
  e.moveTo();
  e.setPosition("relative");
  if(!t)return;
  if(cg.isIE5Mac){
    t.insertAdjacentElement = insertAdj_El;
    t.insert__Adj           = insert__Adj;
  }
  t.insertAdjacentElement(cg.rVal(w,"afterBegin"),e);
};
cg.getTrueOffset = function(e){
  var x=0; var y=0;
  if(!e)return [x,y];
  while(e && (e.style.position=="relative" || e.style.position=="absolute")){
    x+=cg.rInt(e.offsetLeft);
    y+=cg.rInt(e.offsetTop);
    e=e.parentNode;
  }
  return [x,y];
};
cg.getParams = function() {
  var idx = location.href.indexOf('?');
  var params = new Array();
  if (idx != -1) {
    var pairs = location.href.substring(idx+1, location.href.length).split('&');
    for (var i=0; i<pairs.length; i++) {
      nameVal = pairs[i].split('=');
      params[nameVal[0]] = nameVal[1];
    }
  }
  return params;
};

/* Render Fix ------------------------------------------------ */

cg.fixOverlay = function()
{
    var h=cg.el('main_content').offsetHeight-10;
    if(h<0)h=0;
    cg.el('content_overlay_left_lower').style.height = cg.el('content_overlay_right_lower').style.height = h+'px';
};
cg.fixGecko = function()
{
    if(cg.isGecko){
        cg.el('main_body').style.display='none';
        cg.el('main_body').style.display='block';
    }
};

/* IE png alpha replacement ------------------------------------------------ */

if (cg.isIE && cg.major<7 && (cg.major>5 || (cg.major>=5 && cg.minor>=5)))
{
    cg.pngFixAdd = function()
    {
        if (!cg._pngList)
        {
            cg._pngList = new Array();
            cg.addEvent(window,'load',cg.pngFixCorrectList);           
        }
        for(var i=0;i<arguments.length;i++)
        {
            var el = cg.el(arguments[i]);
            el.style.visibility = 'hidden';
            cg._pngList.push(el);
        }
    };
    cg.pngFixCorrectList = function()
    {
        if (cg._pngList)
        {
            for(var i=0;i<cg._pngList.length;i++)
            {cg.pngFixCorrect(cg._pngList[i],true);}
            delete cg._pngList; 
        }
    };
    cg.pngFixCorrect = function(img, set_visible)
    {
        if (typeof img == "string")
        {img = cg.el(img);}
        if (img)
        {
            var imgName = img.src.toUpperCase();
            if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
            {
                var imgID = (img.id) ? "id='" + img.id + "' " : "";
                var imgClass = (img.className) ? "class='" + img.className + "' " : "";
                var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
                var imgStyle = "display:inline-block;" + img.style.cssText;
                if (img.align == "left") imgStyle = "float:left;" + imgStyle;
                if (img.align == "right") imgStyle = "float:right;" + imgStyle;
                if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle;
                img.outerHTML = "<div "+ imgID + imgClass + imgTitle + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"+ (set_visible?"visibility:visible;":"") + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader" + "(src=\'" + img.src + "\', sizingMethod='scale');\"></div>";
                return true;
            }
            else if (set_visible)
            {img.style.visibility='visible';}
        }
        return false;
    };
    cg.pngAlphaFix = function()
    {
        for(var i=(document.images.length-1); i>=0; i--)
        {if (document.images[i].className.indexOf('alpha_fix') > -1){ cg.pngFixCorrect(document.images[i], true); }}
    };
    
    cg.addEvent(window,'load',cg.pngAlphaFix);
    cg.setPNG = function(el,src){el.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = src;};
}
else
{
    cg.setPNG = function(el,src){el.src = src;};
    cg.pngFixAdd = cg.pngFixCorrect = cg.pngFixCorrectList = cg.pngFixAll = function(){;}
}

cg.validate_email = function(str){
    var at="@";
	var dot=".";
	var lat=str.indexOf(at);
	var lstr=str.length;
	var ldot=str.indexOf(dot);
	if (   (str.indexOf(at)==-1)
	    || (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr)
	    || (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr)
		|| (str.indexOf(at,(lat+1))!=-1)
		|| (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot)
		|| (str.indexOf(dot,(lat+2))==-1)
		|| (str.indexOf(" ")!=-1)
	   )
	{
        return false;
	}				
	return true;	
};