//alert('Loading javascript functions.');

function MM_preloadImages() { //v3.0

	var d=document;
	if(d.images)
	{
  		if(!d.MM_p) d.MM_p=new Array();
    	var i,j=d.MM_p.length,a=MM_preloadImages.arguments;
//    	alert('Preloading images.');
    	for(i=0; i<a.length; i++)
    	{
			if (a[i].indexOf("#")!=0)
			{
				d.MM_p[j]=new Image;
				d.MM_p[j++].src=a[i];
			}
		}
	}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;
  if(!d) d=document;
  if((p=n.indexOf("?"))>0&&parent.frames.length)
  {
    d=parent.frames[n.substring(p+1)].document;
    n=n.substring(0,p);
  }
  if(!(x=d[n])&&d.all)
  	x=d.all[n];
  	
  for (i=0;!x&&i<d.forms.length;i++)
  	x=d.forms[i][n];
  	
  for (i=0;!x&&d.layers&&i<d.layers.length;i++)
  	x=MM_findObj(n,d.layers[i].document);
  	
  if(!x && d.getElementById)
  	x=d.getElementById(n);
  return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments;
//  alert('Swapping images.');
  document.MM_sr=new Array;
  for(i=0;i<(a.length-2);i+=3)
  {
//  	alert('arg1='+a[i]+', arg2='+a[i+1]+', arg3='+a[i+2]);
  	if ((x=MM_findObj(a[i]))!=null)
  	{
  		document.MM_sr[j++]=x;
  		if(!x.oSrc) x.oSrc=x.src;
  		x.src=a[i+2];
  	}
  }
}
// The following javascript code is Copyright (c) 2004 Charles R. Estabrooks
// You are granted a license to use this javascript in your
// web site as long as it remains as-is including the
// copyright notice.  The author asks for a contribution
// of $10 or more to support further development. Funds
// may be transmitted via Paypal. Please visit
// www.estabrooks.org for Paypal ID and contact info
//
// seeds used: "P" - twenty-three "Q" fifty-three.  Be sure to use the same seeds
// when encrypting any text to be used with these javascripts
// The writecrypt() function scans the encrypted string, decrypts
// it and writes it to a new page, which is the '&#109;&#097;&#105;&#108;&#116;&#111;:' call
//
// writecrypt(string, key1, key2);
//
// 12-19-06 Added an extra argument to writecrypt/writeclear functions
//			Now you can pass a clear string which will be concatenated to the 
//			encrypted/decrypted string. This is useful for example to include a ?subject=foobar
//			when issuing the "mailto" call.

function writecrypt(foo,key1,key2,bar) {
        foo += ' ';
        var len = foo.length;
        var digit = 0;
        var newstr = '';
        for(var inc = 0; inc < len; inc++) {
                digit = 0;
                while(foo.charCodeAt(inc) != 32) {
                        digit = digit * 10;
                        digit = digit + foo.charCodeAt(inc)-48;
                        inc++;
                }
                newstr += String.fromCharCode(decrypt(digit,key1,key2));
        }
        parent.location = 'm'+'a'+'i'+'l'+'t'+'o'+':'+newstr+bar;
}

//
// The writeclear() function scans the encrypted string, decrypts
// it and writes it to the HTML document.
//
//      writeclear(string, key1, key2);
//

function writeclear(foo,key1,key2,bar) {
        foo += ' ';
        var len = foo.length;
        var digit = 0;
        for(var inc = 0; inc < len; inc++) {
                digit = 0;
                while(foo.charCodeAt(inc) != 32) {
                        digit = digit * 10;
                        digit = digit + foo.charCodeAt(inc)-48;
                        inc++;
                }
                //document.write('&');
                //document.write('#');
                //document.write(decrypt(digit,key1,key2));
                document.write(String.fromCharCode(decrypt(digit,key1,key2))+bar);
        }
}
//
// The decrypt() function takes the encrypted string and
// two keys as arguments and returns the ASCII code of the
// decrypted character
//
// decrypt(string, key1, key2);
//
//

function decrypt(source,key1,key2) {
        holder = (source*source) % key1;
        result = Math.pow(source,(key2 % 2));
        for (var i=1; i<= key2/2; i++) {
                result = (holder*result) % key1;
        }
        return result;
}
