function getParent( element, parentType ){
	var parentType = new RegExp( parentType, 'i' )
	while( !parentType.test( element.nodeName ) && element ){
		element = element.parentNode;
	}
	return element;
}

function getCookie(name){
	var cname = name + "=";
	var dc = document.cookie;
	if (dc.length > 0) {
		begin = dc.indexOf(cname);
		if (begin != -1) {
			begin += cname.length;
			end = dc.indexOf(";", begin);
			if (end == -1) end = dc.length;
				return unescape(dc.substring(begin, end));
		}
	}
	return null;
}

/**
	GNR - Added June 18, 2008

	setCookie. Creates a Cookie.

	Use: seCookie( 'mycookiename', 'mycookieValue', [number of days before expires] )

 */
function setCookie( cookie_name, value, expiredays ) {
	var exdate=new Date();
	exdate.setDate( exdate.getDate() + expiredays );
	document.cookie = cookie_name +  "="  + escape( value ) +
		( ( expiredays == null ) ? "" : ";expires=" + exdate.toGMTString() );
}

function popupWindow( url, width, height ) {
	return window.open( url, 'benefits', 'width=' + width + ', height=' + height + ', resizable=yes, scrollbars=yes, toolbar=no, location=no, directories=no, status=no, menubar=no' );
}

function setFocus( id ){
	try{ $( id ).focus(); } catch( e ){}
}

function showMenu( elem ) {
	elem.className='menuHover'
	//showHideSelects( 'hidden' );
}

function hideMenu( elem ) {
	elem.className=''
	//showHideSelects( 'visible' );
}

function showHideSelects( vi ) {
	if( !document.all ) return;
	var selects = document.getElementsByTagName( 'select' );
	for( var i=0; i<selects.length; i++ )
		selects[i].style.visibility = vi;
}

function createPhoneField( prefix, value, ext, getHTML ) {
	var values = ['',''];
	if( value ){
		value = value.replace( / ext. (\d{0,6})$/, '' );
		if( RegExp.$1 )
			values[1] = [RegExp.$1];
		values[0] = value;
	}
	var htmlCode = '<input type="text" value="' + values[0] + '" name="' + prefix + '1" id="' + prefix + '1" />';
	if( ext )
		 htmlCode += 'ext. <input type="text" size="5" value="' + values[1] + '" name="' + prefix + '2" id="' + prefix + '2" />';
	if( getHTML )
		return htmlCode;
	document.write( htmlCode );
  	return true;
}

function stripNonNumeric( value ) {
	return value.replace( /\D/g, '' );
}

function nl2br( value ){
	return value.replace( /\n/g, '<br />' );
}

function br2nl( value ){
	return value.replace( /<br\n*\/{0,1}>/gi, '\n' );
}

function htmlspecialchars( value ) {
	value = value.replace( /"/g, '&quot;' );
	value = value.replace( /</g, '&lt;' );
	value = value.replace( />/g, '&gt;' );
	//value = value.replace( /&/g, '&amp;' );
	return value;
}


function html_entity_decode( value ) {
	value = value.replace( /&amp;/g, '&' );
	value = value.replace( /&quot;/g, '"' );
	value = value.replace( /&lt;/g, '<' );
	value = value.replace( /&gt;/g, '>' );
	return value;
}

function addslashes(value) {
	return value.replace( /"/g, '\\\"' );
}

function trim( value ) {
	return value.replace(/^\s+|\s+$/g, '');
	/*value = value.replace( /^\s+/g, '' );
	value = value.replace( /\s+$/g, '' );
	return value;*/
}

function unSelect( id ) {
	var el = $( id );
	el.focus();
	var temp = el.value;
	el.value = '';
	el.value = temp;;
}

function getHashLength( Obj ) {
	var i=0;
	for( var a in Obj )
		i++;
	return i;
}

function disableFields( fields ) {
	for( var i=0; i<fields.length; i++ ) {
		try{
			$( fields[i] ).disabled = true;
		} catch(e) {}
	}
}

function showUpgradeMessage() {
	$( 'shortUpgradeText' ).style.display='none';
	$( 'upgradeText' ).style.display='inline';
}

function hideUpgradeMessage(){
	$( 'shortUpgradeText' ).style.display='inline';
	$( 'upgradeText' ).style.display='none';
}

function shortFormatToDate( date, dateFormat ){
	// here i strip time if exists
	var hours = minutes = 0;
	var timeRegExp = /\s*(\d{1,2}):(\d{1,2})\s*(am|pm)?$/i;
	if( timeRegExp.test( date ) ) {
		date = date.replace( timeRegExp, '' );
		var hours = parseInt( RegExp.$1, 10 );
		var minutes = parseInt( RegExp.$2, 10 );
		if( ( RegExp.$3.toUpperCase()=='AM' ) && ( hours == 12 ) )
			hours = 0;
		if( ( RegExp.$3.toUpperCase()=='PM' ) && ( hours < 12 ) )
			hours+=12;
	}
	// first i split the format to know the order of the months
	var dateOrderTemp = dateFormat.split( '/' );
	var dateOrder = new Object();
	for( var i=0; i<dateOrderTemp.length; i++ )
		dateOrder[dateOrderTemp[i]] = i;
	var dateFields = trim( date ).split( '/' );
	if( ( dateFields.length == 3 ) && ( dateOrderTemp.length == 3 ) && 
		isInteger( dateFields[dateOrder['%Y']] ) && 
		isInteger( dateFields[dateOrder['%m']] ) && ( dateFields[dateOrder['%m']]>0 ) && ( dateFields[dateOrder['%m']]<13 ) &&
		isInteger( dateFields[dateOrder['%d']] ) && ( dateFields[dateOrder['%d']]>0 ) && ( dateFields[dateOrder['%d']]<32 )
	) {
		return new Date( dateFields[dateOrder['%Y']], dateFields[dateOrder['%m']]-1, dateFields[dateOrder['%d']], hours, minutes, 0 );
	} else {
		return false;
	}
}

function printId( id, width, height ) {
	var popUp = popupWindow( '', width, height );
	popUp.opener = self;
	popUp.document.write( '<html><head><link rel="stylesheet" type="text/css" href="style.css" /><title>Printing</title></head><body style="padding:10px" onload="window.focus;window.print();">' + $( id ).innerHTML + '</body></html>' );
	popUp.document.close();
}

function checkAllCheckboxes( bool, parent ) {
	var checkboxes = $( parent ).getElementsByTagName( 'input' );
	for( var i=0; i<checkboxes.length; i++ )
		if( /^checkbox$/i.test( checkboxes[i].type ) )
			checkboxes[i].checked = bool;
}

function updateDateFields( item ){
	var fields = new Array();
	var selected = { '%d':'%d', '%m':'%m', '%Y':'%Y' };
	for( var i=1; i<=3; i++ ) {
		fields[i] = $( 'dateFormat' + i );
		selected[fields[i].value] = 0;
	}
	for( var i=1; i<=3; i++ ) {
		if( ( i != item ) && ( fields[i].value == fields[item].value ) )
			fields[i].value = selected['%d'] || selected['%m'] || selected['%Y'];
	}
}

function strip_tags( string ) {
	return string.toString().replace( /(<([^>]+)>)/gi, ' ' );
}

function createTabs( id ) {
	// global variable to store tabs
	if( !window.jjTabs )
		window.jjTabs={'items':{},'defaults':{}};
	var ul = $( id );
	ul.className = 'tabsContent';
	//var lis = ul.getElementsByTagName( 'li' );
	var lis = ul.childElements();
	var tabs = document.createElement( 'ul' );
	tabs.className = 'tabs';

	if( !cookie ) {
		var cookie = getCookie( id );
		try{
			lis[cookie].style.display = 'block';
		} catch( e ) {
			lis[0].style.display = 'block';
			cookie=0;
		}
		window.jjTabs['defaults'][id]=cookie;
	}

	for( var i=0; i<lis.length; i++ ) {
		if( lis[i].title ) {
			window.jjTabs['items'][lis[i].title.toLowerCase().replace( /\W/g, '' )] = {'id':id,'i':i};
			var tab = document.createElement( 'li' );
			tab.innerHTML = '<a href="' + window.location.toString().replace( /#.*$/,'' ) + '#' + lis[i].title.replace( /\s/g, '_' ) + '" id="'+id+i+'" onclick="changeTab( \'' + id + '\', ' + i + ' )" ' + ( i==cookie ? 'class="active"' : '' ) + '>' + lis[i].title + '</a>';
			lis[i].title = '';
			lis[i].className = 'tabItem';
			tabs.appendChild( tab );
		}
	}
	ul.parentNode.insertBefore( tabs, ul );
	var br = document.createElement( 'br' );
	br.style.clear = 'both';
	ul.parentNode.insertBefore( br, ul );
	setInterval ( "changeTabByName()", 100 );
}
function changeTabByName(){
	var name = window.location.hash.toLowerCase().replace( /\W/g, '' ).replace( /_/g, '' );
	if( name && window.jjTabs['items'][name] && ( window.jjTabs['selected']!=name ) ){
		changeTab( window.jjTabs['items'][name]['id'],window.jjTabs['items'][name]['i'] );
		window.jjTabs['selected']=name;
	} else if( !name && window.jjTabs['selected'] ) {
		window.jjTabs['selected']=null;
		for( var a in window.jjTabs['defaults'] )
			changeTab( a, window.jjTabs['defaults'][a] );
	}
}
function changeTab( tabId, elementId ) {
	var tabConteiner = $( tabId );
	if( tabConteiner ) {
		var link = $(tabId+elementId);
		var links = getParent( link, 'ul' ).getElementsByTagName( 'a' );
		for( var i=0; i<links.length; i++ )
			links[i].className='';
		link.className='active';

		//items = tabConteiner.getElementsByTagName( 'li' );
		items = tabConteiner.childElements();
		for( var i=0; i<items.length; i++ ) {
			if( items[i].parentNode == tabConteiner )
				items[i].style.display = ( i==elementId ? 'block' : 'none' );
		}
		var hoy = new Date();
		var fecha = new Date( Date.parse( hoy ) + 604800 );
		document.cookie = tabId + "=" + elementId + ";expires=" + fecha.toGMTString();
	}
}

function checkLogin() {
	//return true;
	// i set a fake cookie, just to test if the cookies are enable
	document.cookie = "fakeCookie=" + escape( 'empty' );
	var cookie = getCookie( 'fakeCookie' );
	if( cookie ) {
		return true;
	} else {
		alert( 'In order to use JibberJobber please enable cookies. Right now your cookies are not enabled.' );
		return false;
	}
}

function showElem( elem ) {
	Element.removeClassName( elem, 'hiddedElem' );
}

function hideElem( elem ) {
	Element.addClassName( elem, 'hiddedElem' );
}

function setSelectValue( value, select ) {
	var pattern = new RegExp( '^' + value + '$', 'i' );
	for( var i=0; i<select.length; i++ ) {
		//if(  select.options[i].text == value ) {
		if( pattern.test( select.options[i].text ) ) {
			select.selectedIndex = i;
			break;
		}
	}
}

function colorStar( obj,event ){
	var cords = Position.cumulativeOffset( obj );
	var offset = event.clientX - cords[0];
	if( offset > 79 )
		offset = 79;
	obj.firstChild.style.width = ( ( offset < 9 ) ? 0 : parseInt( ( offset / 16 ) + 1 ) * 16 ) + "px";
}
function saveRank( obj, id ) {
	new Ajax.Request( getScriptName() + '?action=saveRank&rank=' + parseInt( obj.firstChild.style.width ) / 16  + '&id=' + id, {} );
	obj.getElementsByTagName('b')[0].style.width = obj.firstChild.style.width;
}
function getScriptName() {
	/(\w+\.php)/.test( window.location );
	return RegExp.$1;
}
function stripExtension(value){
	/(\w+)\.php/.test( window.location );
	return RegExp.$1;
}

function encode_utf8( value ){
	return unescape( encodeURIComponent( value ) );
}

function decode_utf8( value ){
	return decodeURIComponent( escape( value ).replace( /%u200B/g, '' ) );
}

function changeStateField() {
	var country = $('country');
	var container = $('stateContainer');
	var input = container.down( 'input' );
	var select = container.down( 'select' );
	if( country.value == 'US' || country.value == '227' ){
		input.style.display='none';
		input.id='state2';
		input.name='state2';
		select.style.display='inline';
		select.id='state';
		select.name='state';
	} else{
		select.style.display='none';
		select.id='state2';
		select.name='state2';
		input.style.display='inline';
		input.id='state';
		input.name='state';
	}
}
function recalculate() {
	try{
	var offset = window.pageYOffset||$$('body')[0].cumulativeScrollOffset()['top'];
	$('floatedOptions').style.marginTop = ( offset<originalOffset ? 0 :(offset-originalOffset+10) ) + 'px';
	}catch(e){}
}
