var isNav4, isNav6, isIE4;
var isGetElementById, isDocumentDotAll, isDocumentDotImages;

/*
 * Browser version snooper; determines your browser
 * (Navigator 4, Navigator 6, or Internet Explorer 4/5)
 */
function setBrowser()
{

	if (document.getElementById) isGetElementById = true;
	if (document.all) isDocumentDotAll = true;
	if (document.images) isDocumentDotImages = true;

    if (navigator.appVersion.charAt(0) == "4")
    {
        if (navigator.appName.indexOf("Explorer") >= 0)
        {
            isIE4 = true;
        }
        else
        {
            isNav4 = true;
        }
    }
    else if (navigator.appVersion.charAt(0) > "4")
    {
        isNav6 = true;
    }
}

/*
 *
 * Given a selector string, return a style object
 * by searching through stylesheets. Return null if
 * none found
 *
 */
function getStyleBySelector( selector )
{
    if (!isNav6)
    {
        return null;
    }
    var sheetList = document.styleSheets;
    var ruleList;
    var i, j;

    /* look through stylesheets in reverse order that
       they appear in the document */
    for (i=sheetList.length-1; i >= 0; i--)
    {
        ruleList = sheetList[i].cssRules;
        for (j=0; j<ruleList.length; j++)
        {
            if (ruleList[j].type == CSSRule.STYLE_RULE &&
                ruleList[j].selectorText == selector)
            {
                return ruleList[j].style;
            }   
        }
    }
    return null;
}

//------------------------------------------------------------------------//
function getIdProperty( id, property )
{
    if (isGetElementById)
    {
        var styleObject = document.getElementById( id );
        if (styleObject != null)
        {
            styleObject = styleObject.style;
            if (styleObject[property])
            {
                return styleObject[ property ];
            }
        }
        styleObject = getStyleBySelector( "#" + id );
        return (styleObject != null) ?
            styleObject[property] :
            null;
    }
    else if (isDocumentDotAll)
    {
		return document.all[id].style[property];
    }
    else
    {
        return document[id][property];
    }
} 

//----------------------------------------------------------------//
 function setIdProperty( id, property, value )
{
    if (isGetElementById)
    {
        var styleObject = document.getElementById( id );
        if (styleObject != null)
        {
            styleObject = styleObject.style;
            styleObject[ property ] = value;
        }
    }
    else if (isDocumentDotAll)
    {
        document.all[id].style[property] = value;
    }
    else if (isIE4)
    {
           document[id][property] = value;
    }
} 
/*************************************/
/** Set Attributes across browsers ***/
/*************************************/
		function setIdAttribute(id, property, value )
		{
		    if (isGetElementById)
		    {
		        var myObject = document.getElementById( id );
		        if (myObject != null)
		        {
		            myObject[ property ] = value;
		        }
		    }
		    else if (isDocumentDotAll)
		    {
		         document.all[id][property] = value;
		    }
		    else
		    {
		         return false;
		    }
		}

/*************************************/
/** Get Attributes across browsers ***/
/*************************************/
		function getIdAttribute(id, property)
		{
		    if (isGetElementById)
		    {
		        var myObject = document.getElementById( id );
		        if (myObject != null)
		        {
		            return myObject[ property ];
		        }
		    }
		    else if (isDocumentDotAll)
		    {
		        return document.all[id][property];
		    }
		    else
		    {
		        return false;
		    }
		}

/*
 *
 * Move a given id.  If additive is true,
 * then move it by xValue dots horizontally and
 * yValue units vertically.  If additive is
 * false, then move it to (xValue, yValue)
 *
 * Note: do not precede the id with a # -- it will be
 * appended when searching the stylesheets
 *
 * Note also: length units are preserved in Navigator 6
 * and Internet Explorer. That is, if left is 2cm and
 * top is 3cm, and you move to (4, 5), the left will
 * become 4cm and the top 5cm.
 *
 */
function generic_move( id, xValue, yValue, additive )
{
    var left = getIdProperty(id, "left");
    var top = getIdProperty(id, "top");
    var leftMatch, topMatch;

    if (isNav4)
    {
        leftMatch = new Array( 0, left, "");
        topMatch = new Array( 0, top, "");
    }
    else if (isNav6 || isIE4 )
    {
        var splitexp = /([-0-9.]+)(\w+)/;
        leftMatch = splitexp.exec( left );
        topMatch = splitexp.exec( top );
        if (leftMatch == null || topMatch == null)
        {
            leftMatch = new Array(0, 0, "px");
            topMatch = new Array(0, 0, "px");
        }
    }
    left = ((additive) ? parseFloat( leftMatch[1] ) : 0) + xValue;
    top = ((additive) ? parseFloat( topMatch[1] ) : 0) + yValue;
    setIdProperty( id, "left", left + leftMatch[2] );
    setIdProperty( id, "top", top + topMatch[2] );
}

/*
 *
 * Move a given id to position (xValue, yValue)
 *
 */
function moveTo( id, x, y )
{
    generic_move( id, x, y, false );
}

/*
 *
 * Move a given id to (currentX + xValue, currentY + yValue)
 *
 */
function moveBy( id, x, y)
{
    generic_move( id, x, y, true );
}

/*
 *
 * Function used when converting rgb format colors
 * from Navigator 6 to a hex format
 *
 */ 
function hex( n )
{
    var hexdigits = "0123456789abcdef";
    return ( hexdigits.charAt(n >> 4) + hexdigits.charAt(n & 0x0f) );
}

/*
 *
 * Retrieve background color for a given id.
 * The value returned will be in hex format (#rrggbb)
 *
 */ 
function getBackgroundColor( id )
{
    var color;

    if (isNav4)
    {
        color = document[id].bgColor;
    }
    else if (isNav6)
    {
        var parseExp = /rgb.(\d+),(\d+),(\d+)./;
        var rgbvals;
        color = getIdProperty( id, "backgroundColor" );
        if (color)
        {
            rgbvals = parseExp.exec( color );
            if (rgbvals)
            {
                color = "#" + hex( rgbvals[1] ) + hex( rgbvals[2] ) +
                    hex( rgbvals[3] );
            }
        }
        return color;
    }
    else if (isIE4)
    {
        return document.all[id].backgroundColor;
    }
    return "";
}

/*
 *
 * Return a division's document
 * 
 */
function getDocument( divName )
{
    var doc;

    if (isNav4)
    {
        doc = window.document[divName].document;
    }
    else if (isNav6)
    {
        doc = document;
    }
    else if (isIE4)
    {
        doc = document;
    }
    return doc;
}

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 expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}
  function swapState(objid) 
  {
     // styleVal = 'id' + objid;
     // value = document.all[styleVal].style.display;
        
        value = getIdProperty(objid,'display');
     if (value == 'inline') 
       {
	  setIdProperty(styleVal, 'display', 'none');
       } 
     else if (value == 'none') 
       {
         setIdProperty(styleVal, 'display', 'inline');
       }
   }
///-----------------------------------------------------------------------------------------///	   
  function swapstateblock(objid) 
  {
    if(document.getElementById(objid) == null)
    {
       alert('Id ' + objid + ' does not exist'); 
       return false;
    }
    value = getIdProperty(objid,'display');
    if (value == 'block') 
    {
	  setIdProperty(objid, 'display', 'none');
    } 
    else if (value == 'none') 
    {
      setIdProperty(objid, 'display', 'block');
    }
   }
///-----------------------------------------------------------------------------------------///
  function CapitaliseAllWords(str1)
  {
     var rawstrings   = str1.match(/[^\s]+/g); 
	 var returnstring = '';

     if (rawstrings)
	 {
	   for (count = 0; count < rawstrings.length; count++) 
	   {
          returnstring = returnstring  + CapitaliseFirstLetter(rawstrings[count]) + ' ' ;
	   }
	  }
	  return trim(returnstring);
   }
///-------------------------------------------------------///
   function CapitaliseFirstLetter(str1)
   {   
	  var result2 = str1.replace(/^[A-Za-z0-9]/,"");
	  var result3 = result2.toLowerCase();
	  return str1.charAt(0).toUpperCase() + result3;
    }
//-------------------------------------------------------//
     function CapitaliseAllWordsEx(arg1,arg2)
	 {
		var localstring = '';
		var ampfound = 0;
		var excludeflag = 0;
		match1 = arg1.match(/[A-Za-z0-9\.\-\&\(\)]+/g);
		match2 = arg2.match(/[^\,]+/g);

		if(match2[0] == '&')
		{
		  ampfound = 1;
		}

		if (match1 != null)
		{
		  for( i=0;i<match1.length;i++)
		   {
			 excludeflag = 0;
		     for (j=0;j<match2.length;j++)
			 {
			    if(match1[i] == match2[j])
				{
				  excludeflag = 1;
				}
			 }
			 if(excludeflag == 1)
			 {
			   if((ampfound == 1) && (match1[i] == '&'))
			   {
			      localstring = localstring + 'and ';
			   }
			   else
			   {
			      localstring = localstring + match1[i] + ' ';
			   }
			 }
			 if(excludeflag == 0)
			 {
			   localstring = localstring + CapitaliseFirstLetter(match1[i]) + ' ';
			 }
		   }
        }	    

	   return localstring;
     }	
///----------------------------------------------------------------------------------------///
     function ltrim ( s )  
     {
	   return s.replace( /^\s*/, "" );
     }

     function rtrim ( s )
     {
	   return s.replace( /\s*$/, "" );
     }

     function trim ( s )
     {
	   return rtrim(ltrim(s));
}

///----------------------------------------------------------------------------------------///
function right(str, n)
{
    if (n <= 0)     // Invalid bound, return blank string
        return "";
    else if (n > String(str).length)   // Invalid bound, return
        return str;                     // entire string
    else { // Valid bound, return appropriate substring
        var iLen = String(str).length;
        return String(str).substring(iLen, iLen - n);
    }
}
///----------------------------------------------------------------------------------------///
function left(str, n)
{
    if (n <= 0)     // Invalid bound, return blank string
        return "";
    else if (n > String(str).length)   // Invalid bound, return
        return str;                // entire string
    else // Valid bound, return appropriate substring
        return String(str).substring(0, n);
}
///-----------------------------------------------------------------------------------------///
     function GetXmlHttpObject() 
     {
         var objXMLHttp = null
         if (window.XMLHttpRequest) 
         {
             objXMLHttp = new XMLHttpRequest();
         }
         else if (window.ActiveXObject) {
           objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP")
        }
         return objXMLHttp
     }
///-----------------------------------------------------------------------------------------///


