

/* if ( navigator.userAgent.substr( 0, 34 ) == 'Mozilla/4.0 (compatible; MSIE 6.0;'
  || navigator.userAgent.substr( 0, 34 ) == 'Mozilla/4.0 (compatible; MSIE 7.0;'
  || navigator.userAgent.substr( 0, 34 ) == 'Mozilla/4.0 (compatible; MSIE 8.0;'
  || navigator.userAgent.match( /Firefox\/1\.5/ )
  || navigator.userAgent.match(/Firefox\/2\./)
  || navigator.userAgent.match(/Firefox\/3\./) 
  || navigator.userAgent.substr( 0, 6 ) == 'Opera/' ) */
	
if ( document.getElementsByTagName && ( window.addEventListener || window.attachEvent ) )

(function(){

var onload = [];

// ----- watermark --------------------------------------------------------------------------

var watermarkFocus = function( event ) {
  var input = event.srcElement || event.target;
  if ( !input.isWatermark ) 
    return;
  input.isWatermark = false;
  input.value = '';
  input.className = input.originalClassName;
};

var watermarkBlur = function( event ) {
  var input = event.srcElement || event.target;
  input.isWatermark = input.value == '' || input.value == input.watermark;
  if ( input.isWatermark ) {
    input.className = input.watermarkStyle || input.originalClassName;
    input.value = input.watermark;
  }
};

onload.push( function() {
	var inputs = document.getElementsByTagName( 'input' );
  for ( var input, i = 0; input = inputs[ i++ ]; ) {
    var watermark = input.getAttribute( 'watermark' ) || '';
    var watermarkStyle = input.getAttribute( 'watermarkStyle' ) || '';
    if ( watermark == '' && watermarkStyle == '' )
      continue;
    input.watermark = watermark;
    input.watermarkStyle = watermarkStyle;
    if ( input.addEventListener ) {
      input.addEventListener( 'focus', watermarkFocus, false );
      input.addEventListener( 'blur', watermarkBlur, false );
    } else {
      input.attachEvent( 'onfocus', watermarkFocus );
      input.attachEvent( 'onblur', watermarkBlur );
    }
    input.originalClassName = input.className;
    input.isWatermark = input.value == '';
    if ( input.isWatermark ) {
      input.value = input.watermark;
      input.className = input.watermarkStyle || input.originalClassName;
    }
  }
} );

// ----- validator --------------------------------------------------------------------------

var validatorSubmit = function( event ) {
  var form = typeof event == 'object' ? ( event.srcElement || event.target ) : this;
  var elements = form.elements, minlength, expression;
  for ( var element, i = 0; element = elements[ i++ ]; ) {
  	var value = element.isWatermark ? '' : element.value;
    if ( element.getAttribute( 'requireSelected' ) ) {
    	var found = false;
    	for ( var one, j = 0; one = elements[ j++ ]; )
    		found = found || one.name === element.name && one.checked;
    	if ( found )
    		continue;
    	// problem found
    }	else if ( typeof ( minlength = parseInt( element.getAttribute( 'minlength' ), 10 ) ) == 'number' && value.length < minlength 
    	|| element.type == 'checkbox' && element.getAttribute( 'requireChecked' ) && !element.checked ) {
    	// problem found
    } else if ( ( expression = element.getAttribute( 'requiredPattern' ) ) && 
    	! ( new RegExp( expression, element.getAttribute( 'requiredOptions' ) || '' ) ).test( value ) ) {
    	// problem found
    } else
    	continue;
    element.focus();
    var message = element.getAttribute( 'requiredMessage' ) || form.getAttribute( 'requiredMessage' ) 
      || document.getElementsByTagName( 'body' )[ 0 ].getAttribute( 'requiredMessage' );
    if ( message )
      alert( message );
    if ( event.preventDefault )
    	event.preventDefault(); 
    return false;
  }
  for ( var element, i = 0; element = elements[ i++ ]; )
  	if ( element.isWatermark )
  		element.value = '';
  return true;
};

onload.push( function() {
  var forms = document.getElementsByTagName( 'form' );
  for ( var form, i = 0; form = forms[ i++ ]; )
    if ( form.addEventListener )
      form.addEventListener( 'submit', validatorSubmit, false );
    else
      form.attachEvent( 'onsubmit', validatorSubmit );
} );

// ----- confirmations ----------------------------------------------------------------------

var confirmClick = function( event ) {
  var link = typeof event == 'object' ? ( event.srcElement || event.target ) : this;
	if ( !confirm( link.getAttribute( 'confirmation' ) ) ) {
		if ( event.preventDefault )
			event.preventDefault();
		if ( event.stopPropagation )
  	  event.stopPropagation();
  	event.cancelBubble = true;
		return ( event.returnValue = false );
	}
	return ( event.returnValue = true );
};

onload.push( function() {
  var links = document.getElementsByTagName( 'a' );
  for ( var link, i = 0; link = links[ i++ ]; )
		if ( link.getAttribute( 'confirmation' ) ) {
	    if ( link.addEventListener )
  	    link.addEventListener( 'click', confirmClick, false );
    	else
      	link.attachEvent( 'onclick', confirmClick );
			var confirmedHref = link.getAttribute( 'confirmation-href' );
			if ( confirmedHref )
				link.href = confirmedHref;
		}
} );

//----- font resizer -----------------------------------------------------------------------

var sizerTargets = [], sizerImages = [], sizerControl = null;

var sizerClick = function( event ) {
  var element = event.srcElement || ( event.target.nodeType == 3 ? event.target.parentNode : event.target );
  while ( element && !element.sizeDelta && !element.sizeValue )
    element = element.parentNode;
  if ( !element )
    return;
  var current = sizerControl.sizeCurrentFactor = element.sizeValue || Math.min( Math.max( sizerControl.sizeCurrentFactor
    + element.sizeDelta, sizerControl.sizeMinFactor ), sizerControl.sizeMaxFactor );
  for ( var i = sizerTargets.length - 1; element = sizerTargets[ i-- ]; )
  	element.style.fontSize = ( element.baseSize * current ) + 'px';
  for ( var i = sizerImages.length - 1; element = sizerImages[ i-- ]; )
  	element.src = ( element.sizeValue ? element.sizeValue == current 
  		: ( element.sizeDelta > 0 ? sizerControl.sizeMaxFactor : sizerControl.sizeMinFactor ) == current )
  		? element.srcDisabled : element.srcEnabled;
  var date = new Date();
	date.setTime( date.getTime() + ( 90 * 24 * 60 * 60 * 1000 ) );
	document.cookie = 'user-font-size=' + current + '; expires=' + date.toGMTString() + '; path=/';
};

onload.push( function() {
  if ( !( sizerControl = document.getElementById( "sizeController" ) ) )
    return;
  sizerControl.style.display = '';
  var min = sizerControl.sizeMinFactor = parseFloat( sizerControl.getAttribute( "sizeMinFactor" ) || "0.8" );
  var max = sizerControl.sizeMaxFactor = parseFloat( sizerControl.getAttribute( "sizeMaxFactor" ) || "1.4" );
  var current = sizerControl.sizeCurrentFactor = document.cookie.match( /user-font-size=([0-9]*\.[0-9]*)/ ) ? parseFloat( RegExp.$1 ) :
  	Math.min( Math.max( parseFloat( sizerControl.getAttribute( "sizeCurrentFactor" ) || "1.0" ), min ), max );
  var element = null, baseSize = null, sizeDelta = null;
  for ( var i = 0; ( element = document.getElementsByTagName( "*" )[ i ] ); i++ ) {
    if ( ( baseSize = element.getAttribute( "baseSize" ) ) ) {
      element.baseSize = parseFloat( baseSize );
      element.style.fontSize = ( element.baseSize * current ) + 'px';
      sizerTargets.push( element );
    }
    if ( ( sizeDelta = element.getAttribute( "sizeDelta" ) ) ) {
      element.sizeDelta = parseFloat( sizeDelta );
      if ( element.addEventListener )
        element.addEventListener( "click", sizerClick, false );
      else
        element.attachEvent( "onclick", sizerClick );
      if ( element.tagName == 'IMG' ) {
        sizerImages.push( element );
        element.srcEnabled = element.getAttribute( "srcEnabled" ) || element.src;
        element.srcDisabled = element.getAttribute( "srcDisabled" ) || element.src;
        element.src = ( element.sizeDelta > 0 ? max : min ) == current ? element.srcDisabled : element.srcEnabled;
      }
    }
    if ( ( sizeValue = element.getAttribute( "sizeValue" ) ) ) {
      element.sizeValue = parseFloat( sizeValue );
      if ( element.addEventListener )
        element.addEventListener( "click", sizerClick, false );
      else
        element.attachEvent( "onclick", sizerClick );
      if ( element.tagName == 'IMG' ) {
        sizerImages.push( element );
        element.srcEnabled = element.getAttribute( "srcEnabled" ) || element.src;
        element.srcDisabled = element.getAttribute( "srcDisabled" ) || element.src;
        element.src = element.sizeValue == current ? element.srcDisabled : element.srcEnabled;
      }
    }
  }
} );

//----- switcher ---------------------------------------------------------------------------

var switchClick = function( controls, index ) {
	var clicked = typeof index == 'number';
	var contents = controls.switchContents;
	if ( !clicked )
		index = controls.switchOver ? controls.switchIndex : 1 + ( controls.switchIndex % controls.switchCount );
	for ( var current = 0, i = 0, one; one = contents.childNodes[ i++ ]; )
		if ( one.nodeType == 1 )
			one.style.display = ++ current == index ? '' : 'none';
	var className = controls.getAttribute( "switchClass" ) || '', selectedName = controls.getAttribute( "switchSelected" ) || 'selected';
	for ( var current = 0, i = 0, one; one = controls.childNodes[ i++ ]; )
		if ( one.nodeType == 1 )
			one.className = ++ current == index ? selectedName : className;
	controls.switchIndex = index;
	if ( controls.switchInterval ) {
		if ( clicked )
			window.clearTimeout( controls.switchTimeoutId );
		controls.switchTimeoutId = window.setTimeout( ( function( a ) { return function() { return switchClick( a ); }; } )( controls ), controls.switchInterval );
	}
	return false;
};

onload.push( function() {
  for ( var i = 0, contents = null, controls; ( controls = document.getElementsByTagName( "*" )[ i++ ] ); )
    if ( ( contents = controls.getAttribute( "switchContents" ) ) && ( contents = controls.switchContents = document.getElementById( contents ) ) ) {
    	var html = '', template = controls.getAttribute( "switchTemplate" ), index = 1;
   		for ( var current = 0, j = 0, one; one = contents.childNodes[ j++ ]; )
   			if ( one.nodeType == 1 ) {
   				html += template.replace( /\$index\$/g, '' + ( ++ current ) ).replace( /\$title\$/g, one.getAttribute( "title" ) || one.getAttribute( "switchTitle" ) || '' );
   				if ( one.style.display != 'none' )
   					index = current;
   			}
   		var count = controls.switchCount = current;
   		controls.switchIndex = index;
   		controls.innerHTML = html; controls.style.display = '';
   		var className = controls.getAttribute( "switchClass" ) || '', selectedName = controls.getAttribute( "switchSelected" ) || 'selected';
   		for ( var current = 0, j = 0, one; one = controls.childNodes[ j++ ]; )
   			if ( one.nodeType == 1 ) {
	   			one.className = ++ current == index ? selectedName : className;
	   			if ( one.addEventListener )
	   			  one.addEventListener( 'click', ( function( a, b ) { return function() { return switchClick( a, b ); }; } )( controls, current ), false );
	   			else
	   				one.attachEvent( 'onclick', ( function( a, b ) { return function() { return switchClick( a, b ); }; } )( controls, current ) );
	   		}
   		var interval = controls.switchInterval = parseInt( controls.getAttribute( "switchInterval" ) ) * 500;
   		controls.switchOver = null;
   		if ( interval ) {
   			controls.switchTimeoutId = window.setTimeout( ( function( a ) { return function() { return switchClick( a ); }; } )( controls ), interval );
   			if ( controls.addEventListener ) {
   			  controls.addEventListener( 'mouseover', ( function( a ) { return function() { a.switchOver = this; }; } )( controls ), false );
   			  controls.addEventListener( 'mouseout', ( function( a ) { return function() { if ( a.switchOver == this ) a.switchOver = null; }; } )( controls ), false );
   			  contents.addEventListener( 'mouseover', ( function( a ) { return function() { a.switchOver = this; }; } )( controls ), false );
   			  contents.addEventListener( 'mouseout', ( function( a ) { return function() { if ( a.switchOver == this ) a.switchOver = null; }; } )( controls ), false );
   			} else {
   				controls.attachEvent( 'onmouseover', ( function( a ) { return function() { a.switchOver = this; }; } )( controls ) );
   			  controls.attachEvent( 'onmouseout', ( function( a ) { return function() { if ( a.switchOver == this ) a.switchOver = null; }; } )( controls ) );
   			  contents.attachEvent( 'onmouseover', ( function( a ) { return function() { a.switchOver = this; }; } )( controls ) );
   			  contents.attachEvent( 'onmouseout', ( function( a ) { return function() { if ( a.switchOver == this ) a.switchOver = null; }; } )( controls ) );
   			}
   		}
    }
} );

//----- htmlstyle ---------------------------------------------------------------------------

var styleCounter = 0;

var styleClick = function( htmlClass, selection, store ) {
	var body = document.getElementsByTagName( "body" )[ 0 ], html = document.getElementsByTagName( "html" )[ 0 ];
	var baseStyle = html.className || '';
	if ( baseStyle.match( new RegExp( '(^|.*\\s)' + htmlClass + '-([\\S]+)($|\\s.*)' ) ) )
		html.className = RegExp.$1 + htmlClass + '-' + selection + RegExp.$3;
	else
		html.className = baseStyle + ' ' + htmlClass + '-' + selection;
	styleCounter ++;
	if ( body ) {
		var helpStyle = body.className || '';
		if ( helpStyle.match( new RegExp( '(^|.*\\s)tools-js-html-style-([\\S]+)($|\\s.*)' ) ) )
			body.className = RegExp.$1 + 'tools-js-html-style-' + styleCounter + RegExp.$3;
		else
			body.className = helpStyle + ' tools-js-html-style-' + styleCounter;
	}
	if ( store ) {
		var value = null; 
		if ( ! document.cookie.match( /(?:^|;\s*)htmlStyle=([^;\s]*)\s*(?:;|$)/ ) )
			value = htmlClass + ',' + selection;
		else {
			var styleMap = decodeURIComponent( RegExp.$1 );
			if ( styleMap.match( new RegExp( '(^|.*,)' + htmlClass + ',(?:[^,]*)($|,.*)' ) ) )
				value = RegExp.$1 + htmlClass + ',' + selection + RegExp.$2;
			else
				value = styleMap + ',' + htmlClass + ',' + selection;
		}
		var date = new Date();
		date.setTime( date.getTime() + ( 360 * 24 * 60 * 60 * 1000 ) );
		document.cookie = 'htmlStyle=' + encodeURIComponent( value ) + '; expires=' + date.toGMTString() + '; path=/';
	}
};

var styleIterateClick = function( htmlClass, styles ) {
	styles = styles.split( ' ' );
	var className = document.getElementsByTagName( "html" )[ 0 ].className;
	if ( className.match( new RegExp( '(^|.*\\s)' + htmlClass + '-([\\S]+)($|\\s.*)' ) ) )
		for ( var i = 0, one; one = styles[ i++ ]; )
			if ( one == RegExp.$2 ) {
				if ( i < styles.length )
					return styleClick( htmlClass, styles[ i ], true );
				return;
			}
};

if ( document.cookie.match( /(?:^|;\s*)htmlStyle=([^;\s]*)\s*(?:;|$)/ ) ) {
	var styleMap = decodeURIComponent( RegExp.$1 ).split( ',' );
	for ( var i = 0, one; one = styleMap[ i++ ]; )
		styleClick( one, styleMap[ i++ ], false );
}

onload.push( function() {
	for ( var i = 0, htmlClass = null, one, two; ( one = document.getElementsByTagName( "*" )[ i++ ] ); )
	  if ( ( htmlClass = one.getAttribute( "htmlClass" ) ) )
	  	if ( ( two = one.getAttribute( "htmlSelection" ) ) )
	 			if ( one.addEventListener )
	 				one.addEventListener( 'click', ( function( a, b ) { return function() { return styleClick( a, b, true ); }; } )( htmlClass, two ), false );
	 			else
	 				one.attachEvent( 'onclick', ( function( a, b ) { return function() { return styleClick( a, b, true ); }; } )( htmlClass, two ) );
	  	else if ( ( two = one.getAttribute( "htmlIterate" ) ) )
	 			if ( one.addEventListener )
	 				one.addEventListener( 'click', ( function( a, b ) { return function() { return styleIterateClick( a, b ); }; } )( htmlClass, two ), false );
	 			else
	 				one.attachEvent( 'onclick', ( function( a, b ) { return function() { return styleIterateClick( a, b ); }; } )( htmlClass, two ) );
} );

// ----- global -----------------------------------------------------------------------------


var start = function() {
	for ( var i = 0, one; one = onload[ i++ ]; )
		one();
};

if ( window.addEventListener )
  window.addEventListener( 'load', start, false );
else
  window.attachEvent( 'onload', start );

document.write( '<style> .tools-js-not-supported { display: none; } </style>' );
	
window.sortTableInt = function( cell, direction ) {
  while ( typeof cell.cellIndex == 'undefined' )
    if ( !( cell = cell.parentNode ) )
      return;
  if ( typeof direction == 'undefined' )
    direction = -1;
  var tbody = cell.parentNode.parentNode;
  var table = cell.parentNode.parentNode.parentNode;
  var column = cell.cellIndex;
  if ( table.sortedFor == column + 'x' + direction )
    direction = -direction;
  var rows = [];
  for ( var i = 1; i < table.rows.length; i++ )
    rows.push( table.rows[ i ] );
  rows.sort( function(a,b) {
    return direction * ( parseInt( a.cells[ column  ].getAttribute( 'intValue' ) ) -
      parseInt( b.cells[ column  ].getAttribute( 'intValue' ) ) );
  } );
  for ( var i = 0; i < rows.length; i++ )
    tbody.appendChild( rows[ i ] );
  table.sortedFor = column + 'x' + direction;
};

})();

