// JavaScript Document

<!--



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_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; 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_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; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)

   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}

}



// yaromat validation

<!--

function YY_checkform() { //v4.71

//copyright (c)1998,2002 Yaromat.com

  var a=YY_checkform.arguments,oo=true,v='',s='',err=false,r,o,at,o1,t,i,j,ma,rx,cd,cm,cy,dte,at;

  for (i=1; i<a.length;i=i+4){

    if (a[i+1].charAt(0)=='#'){r=true; a[i+1]=a[i+1].substring(1);}else{r=false}

    o=MM_findObj(a[i].replace(/\[\d+\]/ig,""));

    o1=MM_findObj(a[i+1].replace(/\[\d+\]/ig,""));

    v=o.value;t=a[i+2];

    if (o.type=='text'||o.type=='password'||o.type=='hidden'){

      if (r&&v.length==0){err=true}

      if (v.length>0)

      if (t==1){ //fromto

        ma=a[i+1].split('_');if(isNaN(v)||v<ma[0]/1||v > ma[1]/1){err=true}

      } else if (t==2){

        rx=new RegExp("^[\\w\.=-]+@[\\w\\.-]+\\.[a-zA-Z]{2,4}$");if(!rx.test(v))err=true;

      } else if (t==3){ // date

        ma=a[i+1].split("#");at=v.match(ma[0]);

        if(at){

          cd=(at[ma[1]])?at[ma[1]]:1;cm=at[ma[2]]-1;cy=at[ma[3]];

          dte=new Date(cy,cm,cd);

          if(dte.getFullYear()!=cy||dte.getDate()!=cd||dte.getMonth()!=cm){err=true};

        }else{err=true}

      } else if (t==4){ // time

        ma=a[i+1].split("#");at=v.match(ma[0]);if(!at){err=true}

      } else if (t==5){ // check this 2

            if(o1.length)o1=o1[a[i+1].replace(/(.*\[)|(\].*)/ig,"")];

            if(!o1.checked){err=true}

      } else if (t==6){ // the same

            if(v!=MM_findObj(a[i+1]).value){err=true}

      }

    } else

    if (!o.type&&o.length>0&&o[0].type=='radio'){

          at = a[i].match(/(.*)\[(\d+)\].*/i);

          o2=(o.length>1)?o[at[2]]:o;

      if (t==1&&o2&&o2.checked&&o1&&o1.value.length/1==0){err=true}

      if (t==2){

        oo=false;

        for(j=0;j<o.length;j++){oo=oo||o[j].checked}

        if(!oo){s+='* '+a[i+3]+'\n'}

      }

    } else if (o.type=='checkbox'){

      if((t==1&&o.checked==false)||(t==2&&o.checked&&o1&&o1.value.length/1==0)){err=true}

    } else if (o.type=='select-one'||o.type=='select-multiple'){

      if(t==1&&o.selectedIndex/1==0){err=true}

    }else if (o.type=='textarea'){

      if(v.length<a[i+1]){err=true}

    }

    if (err){s+='* '+a[i+3]+'\n'; err=false}

  }

  if (s!=''){alert('The required information is incomplete or contains errors:\t\t\t\t\t\n\n'+s)}

  document.MM_returnValue = (s=='');

}



function hide( t )

{

	if (document.getElementById)

	{ // DOM3 = IE5, NS6

		document.getElementById( t ).style.display = 'none';

	}

	else

	{

		if (document.layers)

		{ // Netscape 4

			document[t].display = 'none';

		}

		else

		{ // IE 4

			document.all[t].style.display = 'none';

		}

	}

}



function show( t, d )

{

	if( !d )

	{

		d = '';

	}

	

	if (document.getElementById)

	{ // DOM3 = IE5, NS6

		document.getElementById( t ).style.display = d;

	}

	else

	{

		if (document.layers)

		{ // Netscape 4

			document[t].display = d;

		}

		else

		{ // IE 4

			document.all[t].style.display = d;

		}

	}

}

function toggleVisibility()//actually does what showHide does, just a little bit better..
{
	var t;
	
	for( var i = 0; i < arguments.length; ++i )
	{
		t = arguments[i];
		
		if( t.indexOf )
		{
			try
			{
				var element = getElement( t );
			}
			
			catch( e )
			{
				return;//give up!
			}
		}
		else
		{
			element = t;
		}
		
		element.style.display = element.style.display == 'none' ? '' : 'none' ;
	}
}

function showHide( t, d )

{

	if( !d )

	{

		d = 'hide';

	}

	

	//var element = 

	if( document.getElementById )

	{

		var element = document.getElementById( t );

	}

	else if( document.all )

	{

		element = document.all[t];

	}

	else

	{

		return;

	}

	

	element.style.display = element.style.display == 'none' ? '' : 'none' ;

	

	/*

	if (document.getElementById)

	{ // DOM3 = IE5, NS6

		if( document.getElementById( t ).style.display != '' )

		{

			document.getElementById( t ).style.display = '';

		}

		else

		{

			document.getElementById( t ).style.display = d;

		}

	}

	else

	{

		if (document.layers)

		{ // Netscape 4

			if( document[t].display != '' )

			{

				document[t].display = '';

			}

			else

			{

				document[t].display = d;

			}

		}

		else

		{ // IE 4

			if( document.all[t].style.display != '' )

			{

				document.all[t].style.display = '';

			}

			else

			{

				document.all[t].style.display = d;

			}

		}

	}*/

}



function getVisible( t )

{

	if( document.getElementById )

	{ // DOM3 = IE5, NS6

		if( document.getElementById( t ).style.display == 'none' )

		{

			return false;

		}

		else

		{

			return true;

		}

	}

	else

	{

		if (document.layers)

		{ // Netscape 4

			if( document[t].display == 'none' )

			{

				return false;

			}

			else

			{

				return true;

			}

		}

		else

		{ // IE 4

			if( document.all[t].style.display == 'none' )

			{

				return false;

			}

			else

			{

				return true;

			}

		}

	}

}



function querystring()
{
	//get current querystring into array
	var qs = window.location.search.substr( 1 );//remove '?'
	
	var qsa = qs.split( '&' );
	
	var get = [];
	
	for( i = 0; i < qsa.length; i++ )
	{
		
		var val = qsa[i].split( '=' );
		get[(val[0])] = val[1];
	}
	
	//alert( qsa.length );
	
	//alter/add/remove values
	var gi = 0;
	//alter/remove
	for( i = 0; i < arguments.length; i+=2 )
	{
		for( j in get )
		{
			if( Object.isFunction )
			{
				if( Object.isFunction( get[j] ) )
				{
					continue;
				}
			}
			
			if( arguments[i] == j )
			{
				if( arguments[i+1] == null )//if user hasn't supplied a new value for this, then delete it
				{
					delete get[j];
				}
				else
				{
					get[j] = arguments[i+1];
				}
				
				arguments[i] = null;//unset this from teh arguments object, for the next step
			}
		}
	}
	
	for( i = 0; i < arguments.length; i+=2 )
	{
		if( arguments[i] )
		{
			if( typeof arguments[i+1] == 'object' )
			{
				get[(arguments[i]+'[]')] = arguments[i+1].join( '&'+arguments[i]+'[]=' );
			}
			else
			{
				get[(arguments[i])] = escape( arguments[i+1] );
			}
		}
	}
	
	//make new querystring
	//
	
	//if( get.toQueryString )

	var qsa = [];
	
	for( i in get )
	{
		if( Object.isFunction )
		{
			if( Object.isFunction( get[i] ) )
			{
				continue;
			}
		}
		
		if( get[i] != null )
		{
			qsa.push( i+'='+get[i] );
		}
	}
	
	return '?'+qsa.join( '&' );
}

//used to copy values from one field to another
function copyField( form )
{

	if( arguments.length > 1 )

	{

		//loop through pairs of supplied arguments

		for( var i = 1; i < arguments.length; i+=2 )

		{

			document.forms[form][arguments[i+1]].value = document.forms[form][arguments[i]].value;

		}

	}

	

}



function checkDay2( year, month, day )	//based on script by Arash Ramin (http://www.digitalroom.net)

{

	var m = month.value;

	var y = year.value;

	

	// find number of days in current month + 1 for the initial blank option

	var days = ( ( m == 4 ) || ( m == 6 ) || ( m == 9 ) || ( m == 11 ) )? 30 : ( ( m != 2 )? 31 : ( ( ( Math.floor( y/4 ) == ( y/4 ) ) && ( ( Math.floor( y/100 ) != ( y/100 ) ) || ( Math.floor( y/400 ) == ( y/400 ) ) ) )? 29 : 28 ) )+ 1 ;

	

	//more days are needed

	if( days > day.length )

	{

		for( var i = day.length; i < days; i++ )

		{

			day.options[i] = new Option( i, i, false, false );

		}

	}

	else if ( days < day.length )// if days in new month < current days then we must delete the extra days

	{

		for( var i = days; i < day.length; )

		{

			day.options[i] = null;

		}

		

		if ( day.selectedIndex == -1 )

		{

	  		day.selectedIndex = days - 1;

		}

	}

	

}



function checkDay( name, defaultBlank )	//based on script by Arash Ramin (http://www.digitalroom.net)

{

	//retireves month and year, and sets number of days in days select

	var y = document.getElementById( name+'year' ).options[document.getElementById( name+'year' ).selectedIndex].value;

	var m = document.getElementById( name+'month' ).options[document.getElementById( name+'month' ).selectedIndex].value;

	var d;



	// find number of days in current month

	if( ( m == 4 ) || ( m == 6 ) || ( m == 9 ) || ( m == 11 ) )

	{

		days = 30;

	}

	else if( m == 2 )

	{

		// check for leapyear - Any year divisible by 4, except those divisible by 100 (but NOT 400)

		if( ( Math.floor( y/4 ) == ( y/4 ) ) && ( ( Math.floor( y/100 ) != ( y/100 ) ) || ( Math.floor( y/400 ) == ( y/400 ) ) ) )

		{

			days = 29;

		}

		else

		{

			days = 28;

		}

	}

	else

	{

		days = 31;

	}

	

	if( defaultBlank )

	{

		days++;

	}

	

	// if (days in new month > current days) then we must add the extra days

	if( days > document.getElementById( name+'day' ).length )

	{

		for( i = document.getElementById( name+'day' ).length; i < days; i++ )

		{

			document.getElementById( name+'day' ).length = days;

			

			if(defaultBlank)

			{

				document.getElementById( name+'day' ).options[i].text = i;

				document.getElementById( name+'day' ).options[i].value = i;

			}

			else

			{

				document.getElementById( name+'day' ).options[i].text = i;

				document.getElementById( name+'day' ).options[i].value = i;

			}

		}

	}

	

	// if (days in new month < current days) then we must delete the extra days

	if ( days < document.getElementById( name+'day' ).length)

	{

		document.getElementById( name+'day' ).length = days;

		

		if ( document.getElementById( name+'day' ).selectedIndex == -1 )

		{

	  		document.getElementById( name+'day' ).selectedIndex = days - 1;

		}

	}

}



///////////////////////////////////////

// flash version detection functions //

///////////////////////////////////////



// Detect Client Browser type

var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;

var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;

var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

jsVersion = 1.1;

// JavaScript helper required to detect Flash Player PlugIn version information

function JSGetSwfVer(i){

	// NS/Opera version >= 3 check for Flash plugin in plugin array

	if (navigator.plugins != null && navigator.plugins.length > 0) {

		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {

			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";

      		var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;

			descArray = flashDescription.split(" ");

			tempArrayMajor = descArray[2].split(".");

			versionMajor = tempArrayMajor[0];

			versionMinor = tempArrayMajor[1];

			if ( descArray[3] != "" ) {

				tempArrayMinor = descArray[3].split("r");

			} else {

				tempArrayMinor = descArray[4].split("r");

			}

      		versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;

            flashVer = versionMajor + "." + versionMinor + "." + versionRevision;

      	} else {

			flashVer = -1;

		}

	}

	// MSN/WebTV 2.6 supports Flash 4

	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;

	// WebTV 2.5 supports Flash 3

	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;

	// older WebTV supports Flash 2

	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;

	// Can't detect in all other cases

	else {

		

		flashVer = -1;

	}

	return flashVer;

} 

// If called with no parameters this function returns a floating point value 

// which should be the version of the Flash Player or 0.0 

// ex: Flash Player 7r14 returns 7.14

// If called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available

function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) 

{

 	reqVer = parseFloat(reqMajorVer + "." + reqRevision);

   	// loop backwards through the versions until we find the newest version	

	for (i=25;i>0;i--) {	

		if (isIE && isWin && !isOpera) {

			versionStr = VBGetSwfVer(i);

		} else {

			versionStr = JSGetSwfVer(i);		

		}

		if (versionStr == -1 ) { 

			return false;

		} else if (versionStr != 0) {

			if(isIE && isWin && !isOpera) {

				tempArray         = versionStr.split(" ");

				tempString        = tempArray[1];

				versionArray      = tempString .split(",");				

			} else {

				versionArray      = versionStr.split(".");

			}

			versionMajor      = versionArray[0];

			versionMinor      = versionArray[1];

			versionRevision   = versionArray[2];

			

			versionString     = versionMajor + "." + versionRevision;   // 7.0r24 == 7.24

			versionNum        = parseFloat(versionString);

        	// is the major.revision >= requested major.revision AND the minor version >= requested minor

			if ( (versionMajor > reqMajorVer) && (versionNum >= reqVer) ) {

				return true;

			} else {

				return ((versionNum >= reqVer && versionMinor >= reqMinorVer) ? true : false );	

			}

		}

	}	

	return (reqVer ? false : 0.0);

}



function DrawFlashMovie( src, width, height, bgcolor, name, id, version )

{

	version = version != null ? '#version=' + version : '' ;

	

	return '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'

	 + 'id="' + id + '"'

    + 'width="' + width + '" height="' + height + '"'

    + 'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab' + version + '">'

    + '<param name="movie" value="' + src + '" /><param name="quality" value="high" /><param name="bgcolor" value="' + bgcolor + '" />'

    + '<embed src="' + src + '" quality="high" bgcolor="' + bgcolor + '" '

    + 'width="' + width + '" height="' + height + '" name="' + name + '" align="middle"'

    + 'play="true"'

    + 'loop="false"'

    + 'quality="high"'

    + 'allowScriptAccess="sameDomain"'

    + 'type="application/x-shockwave-flash"'

    + 'pluginspage="http://www.macromedia.com/go/getflashplayer">'

    + '<\/embed>'

    + '<\/object>';

}



function DrawFlashMovieExternal( src, width, height, bgcolor, name, version, flashVars )

{

	version = version != null ? '#version=' + version : '' ;

	

	//<param name="FlashVars" value="jsenabled=true&uid=' . $_GET['uid']; } ?>">

	if( flashVars )

	{

		var fva = new Array();

	

		for( var i in flashVars )

		{

			fva[fva.length] = i+'='+encodeURIComponent( flashVars[i] );

		}

		

		var fv = fva.join( '&amp;' );

	}

	

	document.write( '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' );

	document.write( 'id="' + name + '"' );

	document.write( 'width="' + width + '" height="' + height + '"' );

	document.write( 'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab' + version + '">' );

	

	if( fv )

	{

		document.write( '<param name="FlashVars" value="' + fv + '" />' );

	}

	document.write( '<param name="wmode" value="transparent" /><param name="allowScriptAccess" value="always" /><param name="movie" value="' + src + '" /><param name="quality" value="high" /><param name="bgcolor" value="' + bgcolor + '" />' );

	document.write( '<embed src="' + src + '" quality="high" bgcolor="' + bgcolor + '" ' );

	

	if( fv )

	{

		document.write( 'FlashVars="'+fv+'"' );	

	}

	document.write( 'width="' + width + '" height="' + height + '" name="' + name + '" align="middle"' );

	document.write( 'wmode="transparent"' );

	document.write( 'play="true"' );

	document.write( 'loop="false"' );

	document.write( 'quality="high"' );

	document.write( 'allowScriptAccess="always"' );

	document.write( 'type="application/x-shockwave-flash"' );

	document.write( 'pluginspage="http://www.macromedia.com/go/getflashplayer">' );

	document.write( '<\/embed>' );

	document.write( '<\/object>' );

}



function moveSelectedOptions( from, to )

{

	// Unselect matching options, if required

	if( arguments.length > 3 )

	{

		var regex = arguments[3];

		if( regex != "" )

		{

			unSelectMatchingOptions( from, regex );

		}

	}

	

	// Move them over

	if( !hasOptions( from ) )

	{

		return;

	}

	

	for( var i = 0; i < from.options.length; i++ )

	{

		var o = from.options[i];

		if( o.selected )

		{

			if( !hasOptions( to ) )

			{

				var index = 0;

			}

			else

			{

				var index=to.options.length;

			}

			

			to.options[index] = new Option( o.text, o.value, false, false );

		}

	}

	// Delete them from original

	for( var i = ( from.options.length-1 ); i >= 0; i-- )

	{

		var o = from.options[i];

		if( o.selected )

		{

			from.options[i] = null;

		}

	}

	

	if( ( arguments.length < 3 ) || ( arguments[2] == true ) )

	{

		sortSelect( from );

		sortSelect( to );

	}

	

	from.selectedIndex = -1;

	to.selectedIndex = -1;

}



function selectUnselectMatchingOptions(obj,regex,which,only) {

	if (window.RegExp) {

		if (which == "select") {

			var selected1=true;

			var selected2=false;

			}

		else if (which == "unselect") {

			var selected1=false;

			var selected2=true;

			}

		else {

			return;

			}

		var re = new RegExp(regex);

		if (!hasOptions(obj)) { return; }

		for (var i=0; i<obj.options.length; i++) {

			if (re.test(obj.options[i].text)) {

				obj.options[i].selected = selected1;

				}

			else {

				if (only == true)

				{

					obj.options[i].selected = selected2;

				}

			}

		}

	}

}



function hasOptions( obj )

{

	if( obj != null && obj.options != null )

	{

		return true;

	}

	return false;

}



function sortSelect( obj )

{

	var o = new Array();

	if( !hasOptions( obj ) )

	{

		return;

	}

	

	for( var i = 0; i < obj.options.length; i++ )

	{

		o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected ) ;

	}

	

	if( o.length == 0 )

	{

		return;

	}

	

	o = o.sort( 

			   function(a,b)

			   { 

					if( ( a.text+"" ) < ( b.text+"" ) )

					{

						return -1;

					}

					

					if( ( a.text+"" ) > ( b.text+"" ) )

					{

						return 1;

					}

					return 0;

				} );



	for( var i = 0; i < o.length; i++ )

	{

		obj.options[i] = new Option( o[i].text, o[i].value, o[i].defaultSelected, o[i].selected );

	}

}



//dropdown menu stuff

function getElement( id )

{

	var x = null;

	

	if( document.getElementById )

	{

		x = document.getElementById( id );

	}

	else if( !( x = document[id] ) && document.all )

	{

		x = document.all[id];

	}

	

	return x;

}



function showMenu( menu )

{

	//if a menu is currently open, hide it, and clear it's timeout

	if( openMenu )

	{

		clearMenuTimeout( openMenu );

		hideMenu( openMenu );

	}

	//show this menu

	menu.style.visibility = 'visible';

	//store that this menu is open

	openMenu = menu;

}



function hideMenu()//hides the currently open menu

{

	if( openMenu )

	{

		openMenu.style.visibility = 'hidden';

		openMenu = null;

	}

}



function setMenuTimeout( menu, t )

{

	menu.timeoutId = setTimeout( 'hideMenu()', t );

}



function clearMenuTimeout( menu )

{

	clearTimeout( menu.timeoutId );

}



function menuItemOver( menuItem )

{

	menuItem.className = 'menuItemOver';

}



function menuItemOut( menuItem )

{

	menuItem.className = 'menuItem';

}





var openMenu = null;

var menuOpenTime = 500;



function disable( v )

{

	//alert( v );

	for( var i = 1; i < arguments.length; ++i )

	{

		//alert( arguments[i] )

		

		arguments[i].disabled = v;

	}

}



function chkform( form, rules, gen_err )

{

	gen_err = gen_err == undefined ? 'There were errors in the form you submitted' : gen_err;

	

	var errors = [];

	var rule, field;

	

	for( var i in rules )

	{

		rule = rules[i];

		field = form[i];

		

		switch( rule.type )

		{

			case'string':case'text':case'textfield':case'textarea':

				if( field.value.length == 0 && rule['default'] )//if value is empty, and has a default value supplied, use the default value

				{

					field.value = rule['default'];

				}

				

				if( rule.required && field.value.length == 0 )//value is required, but empty

				{

					errors.push( rule.error );//set error

					break;

				}

				

				if( !rule.required && field.value.length == 0 )//value isn't required, and is empty

				{

					break;//stop

				}

				

				if( rule.min != undefined && field.value.length < rule.min )

				{

					errors.push( rule.error );//set error

					break;

				}

				

				if( rule.max != undefined && field.value.length > rule.max )

				{

					errors.push( rule.error );//set error

					break;

				}

				

				//come back to this one.. not used reg. exp. in js before..

				//if( !empty( $conds['reg'] ) && ( ereg( $conds['reg'], $val ) == 0 ) )//if there is a regular expression condition on this, check it

				//{

				//	return $conds['error'];

				//}

				

				break;

			case 'email':

				if( field.value.length == 0 && rule['default'] )//if value is empty, and has a default value supplied, use the default value

				{

					field.value = rule['default'];

				}

				

				if( rule.required && field.value.length == 0 )//value is required, but empty

				{

					errors.push( rule.error );//set error

					break;

				}

				

				if( !rule.required && field.value.length == 0 )//value isn't required, and is empty

				{

					break;//stop

				}

				

				if( !( /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test( field.value ) ) )

				{

					errors.push( rule.error );//set error

					break;

				}

				break;

			default:

				//alert( rule.type );

		}

	}

	

	if( errors.length > 0 )

	{

		err_msg = gen_err;

		

		alert( err_msg+"\n\n- "+errors.join( "\n- " ) );

		

		return false;

	}

	else

	{

		return true;

	}

}//*/



function array_remove( a, i )//doesn't maintain order of elements

{

	//var j = a[a.length-1];

	a[i] = a[a.length-1];

	a.pop();

}



function array_find( a, v )//returns index of value, or -1 if not found

{

		for( var i = 0; i < a.length; ++i )

		{

			if( a[i] == v )

			{

				return i;

			}

		}

		

		return -1;

}



function toggleRows( coId, d )

{

	if( typeof coId == 'number' )

	{

		var row = getElement( 'rga'+coId );

		var rows = getElement( 'rg'+coId );

		

		var mode = d === undefined ? row.style.display == 'none' : d ;

		

		if( mode )

		{

			row.style.display = '';

			rows.style.display = 'none';

		

			allOpen.push( coId );

			return(0);			

		}

		else

		{

			row.style.display = 'none';

			rows.style.display = '';

			

			array_remove( allOpen, array_find( allOpen, coId ) );

			return(1);

		}

	}

	else

	{

		for( var j in coId )

		{

			var row = getElement( 'rga'+coId[j] );

			var rows = getElement( 'rg'+coId[j] );

			

			var mode = d === undefined ? row.style.display == 'none' : d ;

			

			if( mode )

			{

				row.style.display = '';

				rows.style.display = 'none';

				

				array_remove( allOpen, array_find( allOpen, j ) )

			}

			else

			{

				row.style.display = 'none';

				rows.style.display = '';

				

				allOpen.push( j ); 

			}

		}

	}

	

	return false;

}



//debugging stuff

function list( obj )

{

	var str = '';

	

	for( var i in obj )

	{

		str += i+': '+obj[i]+"\n";

	}

	

	return str;

}



//-->

function togglePermissions(cId,friendId,set)

{

	addToAjaxQueue('/site/address_book/address_book.vars.php?method=toggle&cId='+cId+'&friendId='+friendId+'&set='+set);

	return false;

}

function addAddressToBook(friendId)

{

	addToAjaxQueue('/site/address_book/address_book.vars.php?method=add&friendId='+friendId);

	return false;

}

function removeAddress(friendId)

{

	addToAjaxQueue('/site/address_book/address_book.vars.php?method=delete&friendId='+friendId);

	return false;

}

function revokePermissions(cId,friendId)

{

	addToAjaxQueue('/site/address_book/address_book.vars.php?method=revoke&friendId='+friendId+'&cId='+cId);

	return false;

}

ajaxQueue = new Array();

function addToAjaxQueue(url)

{

	var iframe = getElement('frame');

	if (ajaxQueue.length == 0)

	{

		iframe.src=url;

	}

	ajaxQueue.push(url);

	return false;

}

function completeAddressAjax()

{

	var iframe = getElement( 'frame' );

	//if (iframe.innerHTML.length > 0){

		var str = iframe.contentWindow.document.documentElement.innerHTML;

		str = str.replace('<HEAD>','');

		str = str.replace('</HEAD>','');

		str = str.replace('<BODY>','');

		str = str.replace('<TITLE>','');

		str = str.replace('</TITLE>','');

		str = str.replace('</BODY>','');

		str = str.replace('<head>','');

		str = str.replace('</head>','');

		str = str.replace('<body>','');

		str = str.replace('<title>','');

		str = str.replace('</title>','');

		str = str.replace('</body>','');

		str = str.replace(/^\s*/, "").replace(/\s*$/, "");

		str = str.replace(/^\n*/, "").replace(/\s*$/, "");

		if (str.length > 0){

			var out = str.split(':');

			switch (out[0])

			{

				case 'delete':

				var child = getElement('addressBook-'+out[1]);

				child.parentNode.removeChild(child);

				break;

				case 'revoke':

				var child = getElement('permissions-'+out[1]);

				child.parentNode.removeChild(child);

				break;

				case 'add':

				var child = getElement('addAddress-'+out[1]);

				child.parentNode.removeChild(child);

				break;

				case 'toggle':

				image = getElement(out[1]);

				

				image.src = image.src == 'http://memecounterdev.sitedone.com/imgs/yes.gif' ? 'http://memecounterdev.sitedone.com/imgs/no.gif' : 'http://memecounterdev.sitedone.com/imgs/yes.gif';

				break;

			}

		}

		ajaxQueue.shift();

		if (ajaxQueue.length > 0)

		{

			iframe.src=ajaxQueue[0];

		}

	//}

}

function populateSelectedAddressesField()

{

	var hiddenField = getElement('popupAddressBook_selectedAddresses');

	var j=0;

	hiddenField.value = '';

	for (i in selectedAddresses){

		if (j > 0) hiddenField.value = hiddenField.value + ',';

		hiddenField.value = hiddenField.value + selectedAddresses[i];

		j++;

	}

	return false;

}

function toggleAddress(contactId)

{

	var found=0;

	contactId +=0;

	var row = getElement('addressBook-'+contactId);

	for (i in selectedAddresses){

		if (Number(selectedAddresses[i]) == Number(contactId)){

			selectedAddresses[i] = selectedAddresses[(selectedAddresses.length - 1)];

			selectedAddresses.pop();

			row.className = 'menuItem';

			populateSelectedAddressesField();

			return false;

		}

	}

	selectedAddresses.push(contactId);

	row.className = 'menuItemSelected';

	populateSelectedAddressesField();

	return false;

}



//takes an array of vals as the first argument, and a reg-exp pattern string as the second

//and returns an array of vals in the first argument that match the search string

function filter( vals, str )

{

	var regex = new RegExp( str, 'i' );

	

	var res = [];

	

	for( var i = 0; i < vals.length; ++i )

	{

		if( regex.test( vals[i] ) )

		{

			res.push( vals[i] );

		}

	}

	

	return res;

}



//used by calendar

launchDate = new Date( 0 );//ideally this would b set the start of the campaigns data



function dateStatus( date )

{

	return !( date.valueOf() < new Date().valueOf() && date.valueOf() > launchDate.valueOf() ) 

}



function getSwf( movieName )

{

	if( navigator.appName.indexOf( "Microsoft" ) != -1 )

	{

		return window[movieName]

	}

	else

	{

		return document[movieName]

	}

}

function externalWrite( str )
{
	document.write( str );
}


function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

function htmlchars( str )
{
	var retStr = '';
	
	for( var i = 0; i < str.length; i++ )
	{
		retStr += '&#'+str.charCodeAt( i )+';';
	}
	
	return retStr;
}