/* jQuery functions */
var isOpen  = false;

function showOverlay(overlay) {
	if (!overlay) overlay = 'overlay';
	jQuery('#' + overlay).css('display', 'block');
	jQuery('#' + overlay).height(jQuery(document).height());
}

function hideOverlay(overlay, out) {
	if (!overlay) overlay = 'overlay';
	jQuery('#' + overlay).css('display', 'none');
}

function showOverlayBox(overlay) {
	//if box is not set to open then don't do anything
	if (isOpen == false) return;
	// set the properties of the overlay box, the left and top positions
	jQuery(overlay).css({
		display:'block',
		left:( jQuery(window).width() - jQuery(overlay).width() )/2,
		top:50,
		position:'absolute'
	});
	// set the window background for the overlay. i.e the body becomes darker
	jQuery('.background-cover').css({
		display:'block',
		width: jQuery(document).width(),
		height:jQuery(document).height()
	});
}

function doOverlayOpen(overlay) {
	overlay = '#overlay-box-' + overlay;
	//set status to open
	isOpen = true;
	showOverlayBox(overlay);
	jQuery('.background-cover').css({opacity:0}).animate( {opacity:0.5, backgroundColor:'#000'} );
	// dont follow the link : so return false.
	return false;
}

function doOverlayClose(overlay) {
	overlay = '#overlay-box-' + overlay;
	//set status to closed
	isOpen = false;
	jQuery(overlay).css( 'display', 'none' );
	// now animate the background to fade out to opacity 0
	// and then hide it after the animation is complete.
	jQuery('.background-cover').animate( {opacity:0}, 'fast', null, function() { jQuery(this).hide(); } );
}

/* Standard functions */
function show_brands( element, page, selected ) {
	var id	= element.getAttribute('id');
	var val	= element[element.selectedIndex].value;
	var op	= $('brand');
	if (page == undefined) page = 'brand';
	
	if (op) {
		if (op.disabled == true) return;
		op.disabled = false;
		remove_children( op );
		var callback = function ( node ) {
			var children = node.getElementsByTagName('option');
			for (var i = 0; i < children.length; i++) {
				var opt	= document.createElement('option');
				opt.setAttribute( 'value', children[i].getAttribute('value') );
				opt.appendChild( document.createTextNode( children[i].childNodes[0].nodeValue ) );
				op.appendChild( opt );
			}
			return;
		};
		
		get_xml( callback, page, val, selected );
	}
}

function show_categories( element, page, tag ) {
	if (page == undefined) page = 'category';
	if (tag  == undefined) tag  = 'category';
	var id	= element.getAttribute('id');
	hide_level( id, tag );
	show_product_lines( element, page, tag );
}

function show_product_lines( element, page, tag ) {
	if (page == undefined) page = 'product_line';
	if (tag  == undefined) tag  = 'product_line';
	var id	= element.getAttribute('id');
	var val	= element[element.selectedIndex].value;
	var op	= $(id + '_' + tag);
	var pl  = $(id + '.' + tag);
	
	if (op) {
		op.disabled = false;
		remove_children( op );
		var callback = function ( node ) {
			var children = node.getElementsByTagName('option');
			if (children.length > 1) {
				for (var i = 0; i < children.length; i++) {
					var opt	= document.createElement('option');
					opt.setAttribute( 'value', children[i].getAttribute('value') );
					opt.appendChild( document.createTextNode( children[i].childNodes[0].nodeValue ) );
					op.appendChild( opt );
				}
				show_enable( op );
				if (pl) show_enable( pl );
			} else {
				hide_level( id, tag );
				if ($('brand') && $('brand').disabled == false) show_brands( element );
			}
			return;
		};
		get_xml( callback, page, val );
	}
}

function hide_level( id, tag ) {
	if (tag == 'category') id = id + '_' + tag;
	var ll = $(id + '_product_line.level_4');
	var ml = $(id + '_product_line_level_4');
	if (ll) {
		hide_disable( ll );
	}
	if (ml) {
		ml.value = '';
		hide_disable( ml );
	}
	var lp = $(id + '.product_line');
	var mp = $(id + '_product_line');
	if (lp) {
		hide_disable( lp );
	}
	if (mp) {
		mp.value = '';
		hide_disable( mp );
	}
}

function show_category_list ( category_id, type, theme ) {
	if (toggleBlock( category_id, 'toggle_' + category_id, '' ) && !$('list_' + category_id)) {
		var div    = $(category_id);
		var callback = function ( node ) {
			div.innerHTML = node.innerHTML;
			return;
		};
		get_xml_content( callback, 'category_list', category_id, type, theme );
	}
}

function show_taxid_field ( select, value, id1, id2 ) {
	if (select[select.selectedIndex].value == value) {
		show_enable( id1 );
		hide_disable( id2 );
	} else {
		show_enable( id2 );
		hide_disable( id1 );
	}
	select_exempt( select.form );
}

function show_other ( select, value, id ) {
	if (select[select.selectedIndex].value == value) {
		show_enable( id );
	} else {
		$(id).value = '';
		hide_disable( id );
	}
}

function show_picker ( picker, id ) {
	thisID = id;
	show( picker );
}

function show_enable ( id ) {
	show( id );
	enable( id );
}

function hide_disable ( id ) {
	hide( id );
	disable( id );
}

function enable ( id ) {
	$(id).disabled = false;
}

function disable ( id ) {
	$(id).disabled = true;
}

function show ( id, timeout ) {
	$(id).style.display = "block";
	if (timeout) setTimeout( function() { hide( id ) }, timeout );
}

function hide ( id ) {
	$(id).style.display = "none";
}

function tooltip ( id, tooltip ) {
	$(tooltip).innerHTML = $(id).innerHTML;
	$(tooltip).style.display = "block";
}

function load_entry ( iframe, textarea ) {
	if (!textarea) return;
	// Populate iFrame with rendered HTML
	var h, w;
	var d = window.frames[ iframe.name ].document;
	var iframe_html = textarea.value
	
	d.open();
	d.write( iframe_html );
	d.close();
	
	if (window.opera) {
		h = iframe.contentDocument.body.scrollHeight;
	} else {
		if (d.height) {
			h = d.height;
		} else if (d.body) {
			if (d.body.scrollHeight) { 
				h = d.body.scrollHeight; 
			}
		}
	}
	iframe.height = h;
}

function selected_type ( formObj ) {
	if (formObj.type[1].checked == true) {
		formObj.keyword__0.disabled	= true;
		formObj.brand__0.disabled	= false;
		if ($('department_dynamic_category_product_line').disabled == false) {
			show_brands( formObj.product_line__0 );
		} else if ($('department_dynamic_category').disabled == false) {
			show_brands( formObj.category__0 );
		} else if (formObj.department__0.selectedIndex > -1) {
			show_brands( formObj.department__0 );
		}
	} else {
		formObj.keyword__0.disabled	= false;
		formObj.brand__0.disabled	= true;
	}
}

function select_exempt ( formObj ) {
	if (formObj.taxid_type__0.selectedIndex == 2) return;
	if (formObj.exempt__0[1].checked == true) {
		formObj.taxid_type__0.selectedIndex	= 0;
		formObj.taxid_type__0.disabled		= true;
		formObj.changed_taxid__0.value		= 2;
		formObj.taxid__0.value				= '';
		formObj.taxid__0.readOnly			= true;
		formObj.ssn_part_1.value			= '';
		formObj.ssn_part_1.readOnly			= true;
		formObj.ssn_part_2.value			= '';
		formObj.ssn_part_2.readOnly			= true;
		formObj.ssn_part_3.value			= '';
		formObj.ssn_part_3.readOnly			= true;
		formObj.ein_part_1.value			= '';
		formObj.ein_part_1.readOnly			= true;
		formObj.ein_part_2.value			= '';
		formObj.ein_part_2.readOnly			= true;
	} else {
		formObj.taxid_type__0.disabled		= false;
		formObj.taxid__0.readOnly			= false;
		formObj.ssn_part_1.readOnly			= false;
		formObj.ssn_part_2.readOnly			= false;
		formObj.ssn_part_3.readOnly			= false;
		formObj.ein_part_1.readOnly			= false;
		formObj.ein_part_2.readOnly			= false;
	}
}

function select_residency ( formObj, div1, div2 ) {
	if ((formObj.residency[0].checked == false) && (formObj.residency[1].checked == false)) {
		alert( 'You must choose an optioin' );
		return;
	}
	if (formObj.resident[0].checked == true) {
		url = '/pp/account/payment/non_us_taxpayer.xhtml';
	} else if (formObj.resident[1].checked == true) {
		url = '/pp/account/payment/non_us_non_taxpayer.xhtml';
	} else if (formObj.residency[1].checked == true) {
		$(div1).style.display = 'none';
		$(div2).style.display = 'block';
		return;
	} else {
		url = '/pp/account/payment/us_resident.xhtml';
	}
	if (formObj.start_over.value == 1) url = url + '?start_over=1';
	if (formObj.add_new.value == 1) url = url + '?add_new=1';
	document.location = url;
}

function select_withhold ( checkbox, id ) {
	if (checkbox.checked == true) {
		$(id).style.textDecoration = 'line-through';
	} else {
		$(id).style.textDecoration = 'none';
	}
}

function reset_residency ( formObj ) {
	formObj.residency[0].checked = false;
	formObj.residency[1].checked = false;
	formObj.resident[0].checked  = false;
	formObj.resident[1].checked  = false;
}

function join_taxid ( formObj, save ) {
	var type = formObj.taxid_type__0[formObj.taxid_type__0.selectedIndex].value;
	if (type == 'ssn') {
		taxid = formObj.ssn_part_1.value + formObj.ssn_part_2.value + formObj.ssn_part_3.value;
	} else {
		taxid = formObj.ein_part_1.value + formObj.ein_part_2.value;
	}
	formObj.taxid__0.value = taxid;
	if (save) formObj.changed_taxid__0.value = save;
}

// this function focus' on the correct input fields //
// and disables the appropriate input fields        //
function chpasswd( contact ) {
	if (contact.passwd__0.checked == true) {
		// enable and focus on passwrd //
		enable_password( contact );
	} else {
		// disable and empty password //
		disable_password( contact );
	}
}

function disable_password( contact ) {
	contact.password__0.disabled			= true;
	contact.password__0.value				= '';
	contact.confirm_password__0.disabled	= true;
	contact.confirm_password__0.value		= '';
}

function enable_password( contact ) {
	contact.confirm_password__0.disabled	= false;
	contact.password__0.disabled			= false;
	contact.password__0.focus();
}

function change_password( contact ) {
	if (contact.old_password__0.value || 
		contact.password__0.value || 
		contact.confirm_password__0.value) {
		contact.passwd__0.value = 1;
	} else {
		contact.confirm_password__0.disabled	= true;
		contact.old_password__0.disabled		= true;
		contact.password__0.disabled			= true;
	}
}

function check_keyword( form_name, keyword, category ) {
	if ($(keyword).value) {
		return true;
	} else {
		return check_form( form_name, category );
	}
}

function check_form( form_name ) {
	var missing	= 0;
	var invalid	= '';
	for (var i = 1; i < arguments.length; i++) {
		var arg		= arguments[i];
		var name;
		if (form_name.indexOf('-')) {
			name = form_name.split('-')[0] + '.' + arg;
		} else {
			name = form_name + '.' + arg;
		}
		var element;
		$(name).style.color = '';
		eval( 'element = document.forms["' + form_name + '"].' + arg );
		if (element.disabled == false) {
			if (element.length) {
				if (typeof(element.selectedIndex) == 'undefined') {
					var has_checked = 0;
					for (var j = 0; j < element.length; j++) {
						if (element[j].checked == true) {
							has_checked = 1;
						}
					}
					if (!has_checked) {
						$(name).style.color = 'red';
						missing++;
					}
				} else {
					if (element.selectedIndex == 0) {
						$(name).style.color = 'red';
						missing++;
					}
				}
			} else if (arg.indexOf('_url') > -1) {
				if (!element.value) {
					$(name).style.color = 'red';
					missing++;
				} else if (check_page_url( element )) {
					invalid = "Sorry, you can only link to pages from BizRate\n";
					$(name).style.color = 'red';
				}
			} else if (!element.value) {
				missing++;
				$(name).style.color = 'red';
			}
		}
	}
	if (missing || invalid) {
		alert( invalid + "The items in red are required.\n" );
		return false;
	}
	return true;
}

function check_page_url( url ) {
	var regExp = RegExp('http[s]*://(\\w+[.])*(beso|bizrate).com[/]*');
	var found  = url.value.match( regExp );
	if (found) {
		return 0;
	} else {
		return 1;
	}
}

function check_country( country, id ) {
	if (country.value == 'US') {
		hide_disable('state_text');
		show_enable('state_menu');
	} else {
		hide_disable('state_menu');
		show_enable('state_text');
	}
}

function check_length( text, length, counter ) {
	if (text.value.length > length) {
		alert( 'Description cannot be longer than ' + length + ' characters.' );
		text.value = text.value.substr( 0, length );
		counter.innerHTML = length - text.value.length;
		return 1;
	} else {
		counter.innerHTML = length - text.value.length;
		return 0;
	}
}

function checkAll( formname, prefix, checkmark ) {
	var form = document.forms[formname];
	var re = new RegExp( prefix );
	for (var i = 0; i < form.elements.length; i++) {
		if (typeof(form.elements[i].name) != "undefined") {
			var element = form.elements[i].name.match( re );
			if (element != null) {
				var box = form.elements[i];
				box.checked = checkmark;
			}
		}
	}
}

function isChecked( form, prefix ) {
	var count = 0, i;
	var re = new RegExp( prefix );
	for (i = 0; i < form.elements.length; i++) {
		if (typeof(form.elements[i].name) != "undefined") {
			var element = form.elements[i].name.match( re );
			if ((element != null) && (form.elements[i].checked == true)) { count++; }
		}
	}
	if (count > 0) {
		form.action = "/pp/links/placement/edit.xhtml";
		form.submit();
	} else {
		alert( 'You must select at least 1 placement ID to edit' );
		return false;
	}
}

function submit_filter( form_obj, param, evalue ) {
	if ((param == 'sort_by__0') || (param == 'show__0')) {
		form_obj.start__0.value = 1;
	}
	if ((param == 'show') || (param == 'orderBy')) {
		form_obj.start.value = 1;
	}
	eval( 'form_obj.' + param +  '.value = evalue' );
	form_obj.submit();
}

function openInParent ( location ) {
	window.opener.location.href = location;
}

function setFrameStyle( item, style, value, reload ) {
	var iFrame  = item.replace( 'divContent-', 'frameContent-' );
	var src     = $(iFrame).src;
	var re      = new RegExp( 'style-.*' );
	var myStyle = setStyleParams();
	if (style) {
		var reg = new RegExp( style + '-\\d' );
		src     = src.replace( reg, style + '-' + value );
	}
	// set the preferences here
	setPreferences( myStyle );
	// return unless reloading the iFrame
	if (!reload) return;
	// reload the iFrame
	$(iFrame).src = src.replace( re, 'style-' + myStyle );
}

function setShowRandom( item, random ) {
	var reg    = new RegExp( 'showProducts-\\d/showRandom-\\d' );
	var iFrame = item.replace( 'divContent-', 'frameContent-' );
	var src    = $(iFrame).src;
	if (random.checked == true) {
		var num = random.value * 2;
		$(iFrame).src = src.replace( reg, 'showProducts-' + num + '/showRandom-' + random.value );
	} else {
		$(iFrame).src = src.replace( reg, 'showProducts-' + random.value + '/showRandom-0' );
	}
	var myStyle = setStyleParams();
	setPreferences( myStyle );
	updateStyle( item );
}

function setStyleParams( ) {
	var font    = $('text_font_style').value;
	var size    = $('text_font_size').value;
	var link    = $('link').value;
	var aLink   = $('a-link').value;
	var vLink   = $('v-link').value;
	var hLink   = $('h-link').value;
	var text    = $('text').value;
	var bgColor = $('background').value;
	var target  = $('target').value;
	var iBorder = $('image_border').value + ';' + escape( $('image_border_size').value + ' ' + $('image_border_style').value );
	var myStyle = escape( size + ' ' + font ) + ';' + text + ':' + bgColor + ':' + link + ':' + aLink + ':' + vLink + ':' + hLink + ':' + iBorder + ';' + target;
	myStyle     = myStyle.replace( /#/g, '' );
	return myStyle;
}

function setPreferences( myStyle ) {
	// set the preferences here
	var cb    = function ( node ) { return; };
	var param = myStyle + ';' + $('border_size').value + ':' + $('border_style').value + ':' + $('border').value.replace( /#/g, '' );
	if ($('randomize').checked == true) param = param + ';1';
	get_xml( cb, 'set_preferences', param );
}

function setSelectedRadio( item, index ) {
	var element = document.forms.styles[item];
	for (var i = 0; i < element.length; i++) {
		element[i].checked = false;
	}
	element[index].checked = true;
}

function setSelectedStyle( item, style, value, border ) {
	var element  = $(item);
	if (!element) return;
	var previous = $(previousID);
	if (previous) previous.style[style] = border;
	element.style[style] = value;
	previousID = element.id;
}

function setStyle( item, style, value, iframe ) {
	var element = $(item);
	if (!element) return;
	if (element.style[style]) element.style[style] = value;
	setFrameStyle( item, style, value, iframe );
	updateStyle( item );
}

function setValue( ) {
	// updated values of arguments passed in
	for (var i = 0; i < arguments.length; i++) {
		var element	= arguments[i];
		var value	= arguments[++i];
		if (element) element.value = value;
	}
}

function setWindow( ) {
	w = document.window;
	var y = screen.availHeight / 2;
	var x = screen.availWidth / 2;
	w.moveTo( x, y );
	w.resizeTo( 700, screen.availHeight );
}

function getHTML( sourceID, targetID, formObj ) {
	var params = new Object();
	params['publisher_id__0']		= formObj.publisher_id__0.value;
	params['asset_id__0']			= formObj.asset_id__0.value;
	params['asset_type_id__0']		= formObj.asset_type_id__0.value;
	params['op']					= formObj.op.value;
	params['_from']					= formObj._from.value;
	params['_class__0']				= formObj._class__0.value;
	params['placement_number__0']	= formObj.placement_number__0[formObj.placement_number__0.selectedIndex].value;
	if (formObj.text__0) {
		params['text__0']			= formObj.text__0.value;
	}
	if (formObj.department__0.selectedIndex >= 0) {
		params['department__0']		= formObj.department__0[formObj.department__0.selectedIndex].value;
	}
	if (formObj.category__0.selectedIndex >= 0) {
		params['category__0']		= formObj.category__0[formObj.category__0.selectedIndex].value;
	}
	if (formObj.product_line__0.selectedIndex >= 0) {
		params['product_line__0']	= formObj.product_line__0[formObj.product_line__0.selectedIndex].value;
	}
	var target = $(targetID);
	if ( target.style.display == 'block' || target.style.display == '' ) return;
	target.innerHTML = '';
	target.style.display = 'none';
	var callback = function ( dom ) {
		var source = dom.getElementById( 'source' );
		target.innerHTML = source.innerHTML;
		new Effect.SlideDown( targetID );
		return;
	};
	load_xml_post( '/pp/xml/' + sourceID + '.xml', params, callback );
}

function toggleBlock( info_id, link_id, text ) {
	// Variables
	var toggleObj = $(info_id);
	var linkObj   = $(link_id);
	var textObj	  = $(text);
	text = textObj ? text : '';
	if (toggleObj) {
		if (toggleObj.style.display != "none") {
			// HIDE
			hide( toggleObj );
			if (linkObj) linkObj.innerHTML = '<img src="/images/icon_plus.gif" border="0" alt="expand" title="expand" />' + text;
			return 0;
		} else {
			// SHOW
			show( toggleObj );
			if (linkObj) linkObj.innerHTML = '<img src="/images/icon_minus.gif" border="0" alt="collapse" title="collapse" />' + text;
			return 1;
		}
	}
}

function toggleAll( link, tag, info_id, link_id, text ) {
	var divs = document.getElementsByTagName( tag );
	var re   = new RegExp( info_id );
	for (var i = 0; i < divs.length; i++) {
		var matches = divs[i].id.match( re );
		if (matches) {
			var new_info_id = divs[i].id;
			var new_link_id = divs[i].id.replace( info_id, link_id );
			if ((link.id == 'expand') && (divs[i].style.display == "none")) {
				toggleBlock( new_info_id, new_link_id, text );
			}
			if ((link.id == 'collapse') && (divs[i].style.display == "block")) {
				toggleBlock( new_info_id, new_link_id, text );
			}
		}
	}
	if (link.id == 'expand') {
		link.id = 'collapse';
	} else if (link.id == 'collapse') {
		link.id = 'expand';
	}
}

function expandAll( link, tag, info_id, link_id, text ) {
	var divs = document.getElementsByTagName( tag );
	var re   = new RegExp( info_id );
	for (var i = 0; i < divs.length; i++) {
		var matches = divs[i].id.match( re );
		if (matches) {
			var new_info_id = divs[i].id;
			var new_link_id = divs[i].id.replace( info_id, link_id );
			if ((link.id == 'expand') && (divs[i].style.display == "none")) {
				toggleBlock( new_info_id, new_link_id, text );
			}
		}
	}
}

function collapseAll( link, tag, info_id, link_id, text ) {
	var divs = document.getElementsByTagName( tag );
	var re   = new RegExp( info_id );
	for (var i = 0; i < divs.length; i++) {
		var matches = divs[i].id.match( re );
		if (matches) {
			var new_info_id = divs[i].id;
			var new_link_id = divs[i].id.replace( info_id, link_id );
			if ((link.id == 'collapse') && (divs[i].style.display == "block")) {
				toggleBlock( new_info_id, new_link_id, text );
			}
		}
	}
}

function updatePID( menu, prefix_form, prefix_content, prefix_pid, pid ) {
	var selected = menu.options[menu.selectedIndex].value;
	var forms    = document.getElementsByTagName('form');
	for (var j = 0; j < prefix_pid.length; j++) {
		var re = new RegExp( prefix_pid[j] + '\\d+', 'g' );
		for (var i = 0; i < forms.length; i++) {
			if (forms[i].id.match( prefix_form )) {
				var textarea   = $(prefix_content + forms[i].id.split('-')[1]);
				textarea.value = textarea.value.replace( re, prefix_pid[j] + selected );
			}
		}
	}
	$(pid).innerHTML = selected;
}

function updatePlacementID( textareaID, prefix_content, placementID ) {
	var textarea = $(textareaID);
	for (var j = 0; j < prefix_content.length; j++) {
		var re = new RegExp( prefix_content[j] + '\\d+', 'g' );
		textarea.value = textarea.value.replace( re, prefix_content[j] + placementID );
	}
}

function updateStyle( item ) {
	var textarea = item.replace( 'divContent-', 'textContent-' );
	var iFrame   = item.replace( 'divContent-', 'frameContent-' );
	var div      = item.replace( 'divContent-', 'getContent-' );
	var links    = $(div).getElementsByTagName('a');
	var text     = $(textarea).value;
	// change values in the textarea block //
	text = text.replace( /target="[^"]+"/g, 'target="' + $('target').value + '"' );
	text = text.replace( /color: #\w+;/g, 'color: ' + $('link').value + ';' );
	text = text.replace( /background-color: #\w+;/, 'background-color: ' + $('background').value + ';' );
	text = text.replace( /border: \d+px \w+ #\w+;/, 'border: ' + $('border_size').value + ' ' + $('border_style').value + ' ' + $('border').value + ';' );
	text = text.replace( /font-family: [^;]+;/, 'font-family: ' + $('text_font_style').value + ';' );
	text = text.replace( /font-size: \w+;/, 'font-size: ' + $('text_font_size').value + ';' );
	text = text.replace( /;color: #\w+;/, ';color: ' + $('text').value + ';' );
	text = text.replace( /src="[^"]+"/, 'src="' + $(iFrame).src + '"' );
	text = text.replace( 'noLog-1/', '' );
	text = text.replace( 'cache-1/', '' );
	$(textarea).value = text;
	// change values in the display block //
	$(item).style.backgroundColor = $('background').value;
	$(item).style.fontFamily      = $('text_font_style').value;
	$(item).style.fontSize        = $('text_font_size').value;
	$(item).style.color           = $('text').value;
	$(item).style.border          = $('border_size').value + ' ' + $('border_style').value + ' ' + $('border').value;
	for (var i = 0; i < links.length; i++) {
		links[i].style['color'] = $('link').value;
		links[i].target         = $('target').value;
	}
	updatePlacementID( textarea, [ 'placement_id--', 'placementID-' ], $('placement_id').value );
}

/** ################################################################ **/

function remove_children( element, end ) {
	var children = element.childNodes;
	var currentchildren = children.length;
	if (!end) end = 0;
	for (var i = currentchildren - 1; i >= end; i--) {
		if (children[i]) {
			element.removeChild( children[i] );
		}
	}
}

function get_xml_content( cb, page, id ) {
	var url	= '/pp/xml/' + page + '.xml^';
	for (var i = 2; i < arguments.length; i++) {
		var element = arguments[i];
		if (element) {
			url = url + element + '!';
		}
	}
	var callback = function( content, req ) {
		var dom = req.responseXML; 
		var node = dom.getElementById( id );
		if (node) {
			cb( node );
			return;
		}
		alert("No DOM element found with id '" + id + "' in get_xml_content()");
	};
	load_text_get( url, callback );
}

function get_xml( cb, page ) {
	var url	= '/pp/xml/' + page + '.xml^';
	for (var i = 2; i < arguments.length; i++) {
		var element = arguments[i];
		if (element) {
			url	= url + element + '!';
		}
	}
	var callback	= function( dom ) {
		var s	= dom.getElementsByTagName('select');
		for (var i = 0; i < s.length; i++) {
			if (s[i].getAttribute('id') == page) {
				cb( s[i] );
				return;
			}
		}
		alert("No DOM element found with id '" + page + "' in get_xml()");
	};
	load_xml_get( url, callback );
}

// google hack
function _IG_RegisterOnloadHandler( load ) {
	var oldonload = window.onload;
	if (typeof(oldonload) == 'function') {
		window.onload = function() { load(); oldonload(); };
	} else {
		window.onload = function() { load(); };
	}
}

function _esc( value ) {
	return escape( value );
}

function _gel( id ) {
	return $( id );
}

function _IG_GetImageUrl( url ) {
	return url;
}

function _ADS_ClickDestinationUrl( url ) {
	document.location.target = '_blank';
	document.location = url;
}

function strictWidth( txt, w, class_name ) {
	// measure the width in pixels of the given text
	// w/in a div of the designated class and if need be remove one
	// character at a time until the remaining text would fit w/o overflowing
	// and add an elipsis if we have removed any characters
	var ln  = txt;
	var max = w;
	var wn  = 0, w0 = -1;
	var scratch = _gel('scratch');
	if (!scratch) return txt;
	scratch.className = class_name;
	scratch.innerHTML = '...&nbsp;';
	max -= getWidthInPixels('scratch');
	scratch.innerHTML = ln;
	while((wN = getWidthInPixels('scratch')) >= max) {
		if (wN == w0 && wN < w) {
			// the width is not changing for whatever reason
			// and clipped text is not as bad as an infinite loop
			// so let's just get out of here
			break;
		} else if (w0 > 0 && wN > w0) {
			// we got larger
			// maybe we were given something like '&#376;' instead of 'Y'
			// so we probably just broke something, let's put it all back
			// and return the original text
			ln = txt;
			break;
		}
		w0 = wN;
		ln = ln.substr(0, ln.length - 2);
		scratch.innerHTML = ln;
	}
	if (ln.length < txt.length) {
		ln += '...';
	}
	var rtn = '<div class="strict_text" style="overflow: hidden;width: ' + w + 'px;">' + ln + '</div>';
	scratch.innerHTML = '';
	return rtn;
}

function getWidthInPixels ( id ) {
	var rtn = 0;
	// NOTE: id should be that of a div w/in a table
	var it = _gel(id);
	if (it) {
		if (it.clientWidth > 0) {
			rtn = it.clientWidth;
		} else if (it.style.pixelWidth > 0) {
			rtn = it.style.pixelWidth;
		} else if (it.offsetWidth > 0) {
			rtn = it.offsetWidth;
		}
	}
	return rtn;
}

function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof(element) == 'string') {
			if (document.getElementById) {
				// this is the way the standards work: Safari, FireFox
				element = document.getElementById( element );
			} else if (document.all) {
				// this is the way old msie versions work
				element = document.all[element];
			} else if (document.layers) {
				// this is the way nn4 works
				element = document.layers[element];
			}
		}
		if (arguments.length == 1) {
			return element;
		}
		elements.push( element );
	}

	return elements;
}
