/**
 * whosridingwhere.com
 * yhst-28278576892338
 */

// Create onDomReady Event
window.onDomReady = fireOnDomReady;
// Setup the event
function fireOnDomReady( fn )
{
	// W3C
	if( document.addEventListener )
	{
		document.addEventListener( 'DOMContentLoaded', fn, false );
	}
	// IE
	else
	{
		document.onreadystatechange = function() { readyState( fn ) }
	}
}
// IE execute function
function readyState( fn )
{
	//dom is ready for interaction
	if( document.readyState == 'interactive' )
	{
		fn();
	}
}

// addListener()
var addListener = function() {
	if ( window.addEventListener ) {
		return function(el, type, fn) {
			if ( !el ) { return; }
			el.addEventListener(type, fn, false);
		};
	} else if ( window.attachEvent ) {
		return function(el, type, fn) {
			if ( !el ) { return; }
			var f = function() {
				fn.call(el, window.event);
			};
			el.attachEvent('on'+type, f);
		};
	} else {
		return function(el, type, fn) {
			if ( !el ) { return; }
			el['on'+type] = fn;
		};
	}
}();

// removeListener()
var removeListener = function() {
	if ( window.addEventListener ) {
		return function(el, type, fn) {
			if ( !el ) { return; }
			el.removeEventListener(type, fn, false);
		};
	} else if ( window.attachEvent ) {
		return function(el, type, fn) {
			if ( !el ) { return; }
			var f = function() {
				fn.call(el, window.event);
			};
			el.detachEvent('on'+type, f);
		};
	} else {
		return function(el, type, fn) {
			if ( !el ) { return; }
			el['on'+type] = null;
		};
	}
}();

// dispatchListener()
var dispatchListener = function() {
	if (document.createEvent) {
		return function(el, type, module) {
			if ( !el ) { return; }
			var evObj = document.createEvent((module)? module : 'Events');
			evObj.initEvent(type, true, true);
			el.dispatchEvent(evObj);
		};
	} else if (document.createEventObject) {
		return function(el, type, module) {
			if ( !el ) { return; }
			el.fireEvent('on' + type);
		};
	} else {
		return function(el, type, module) {
			if ( !el ) { return; }
			eval('el.on' + type + '();');
		};
	}
}();

// genElement()
function genElement( tName, attr )
{
	var obj = null;
	if ( tName )
	{
		if ( attr == null )
		{
			obj = document.createTextNode( tName );
		}
		else
		{
			obj = document.createElement( tName );
			for ( var i in attr )
			{
				obj[i] = attr[i];
			}
		}
	}
	return obj;
}

// orphanChildren()
function orphanChildren( obj )
{
	if ( obj )
	{
		while ( obj.firstChild )
		{
			obj.removeChild( obj.firstChild );
		}
	}
}

// killDefault()
function killDefault( e )
{
	if ( e && e.preventDefault )
	{
		e.preventDefault();
	}
	else
	{
		var e = e || window.event;
		e.returnValue = false;
	}
}

// appendOption()
function appendOption( selectObj, text, value )
{
	if ( !selectObj )
	{
		return false;
	}
	selectObj.options[ selectObj.options.length ] = new Option( text.toString(), value == null ? text.toString() : value.toString() );
}

// objId()
function objId( id )
{
	var getEl = document.getElementById( id );
	if ( getEl )
	{
		return getEl;
	}
	return null;
}

// objIdVal()
function objIdVal( id )
{
	var getEl = document.getElementById( id );
	if ( getEl )
	{
		return getEl.value;
	}
	return '';
}

/*
// inArray()
Array.prototype.inArray = function( obj )
{
	var len = this.length;
	for ( var x = 0 ; x <= len ; x++ )
	{
		if ( this[x] == obj )
		{
			return true;
		}
	}
	return false;
}
*/

// inArray()
function inArray( needle, haystack )
{
	for ( var i in haystack )
	{
		if ( haystack[i] == needle )
		{
			return true;
		}
	}
	return false;
}

// objSetVal()
function objSetVal( id, val, def )
{
	var def = ( def != null &&  def != undefined ) ? def : '';
	var val = ( val != null &&  val != undefined && val != '' ) ? val : def.toString();
	var obj = objId( id );
	if ( obj )
	{
		switch ( obj.type )
		{
			case 'select-one':
				for ( var i = 0, len = obj.options.length; i < len; i++ )
				{
					obj.options[i].selected = obj.options[i].value == val ? true : false;
				}
				break;
			case 'select-multiple':
				for ( var i = 0, len = obj.options.length; i < len; i++ )
				{
					obj.options[i].selected = inArray( obj.options[i].value, val ) ? true : false;
				}
				break;
			case 'text':
			case 'file':
			case 'hidden':
			case 'textarea':
				obj.value        = val;
				obj.defaultValue = val;
				break;
			case 'checkbox':
				obj.checked = true;
				break;
			default:
				if ( obj.innerHTML )
				{
					obj.innerHTML = val;
				}
		}
		return true;
	}
	return false;
}

// scSiteFormYear()
function scSiteFormYear( id )
{
	var siteFormYear = objId( id );
	if ( !siteFormYear )
	{
		return;
	}
	var siteFormYearParent = siteFormYear.parentNode;
	// destroy input box
	siteFormYearParent.removeChild( siteFormYear );
	// get year
	var currDate  = new Date();
	var currYear  = currDate.getFullYear();
	var lastYear  = currYear + 4;
	// create select menu and options
	var selectObj        = document.createElement( 'select' );
	selectObj.id         = id;
	selectObj.name       = id;
	selectObj.className  = 'list';
	selectObj.options[0] = new Option( 'Yr', '' );
	for ( var i = currYear; i < lastYear; i++ )
	{
		selectObj.options[ selectObj.options.length ] = new Option( '\'' + i.toString().substring( 2 ), i.toString() );
	}
	selectObj.selectedIndex = 0;
	// append select menu
	siteFormYearParent.appendChild( selectObj );
}

// scSiteFormEvent()
function scSiteFormEvent()
{
	var siteFormEvent   = objId( 'siteFormEvent' );
	var siteFormService = objId( 'siteFormService' );
	if ( !siteFormService )
	{
		return;
	}
	for ( var i = 0, len = siteFormService.options.length; i < len; i++ )
	{
		siteFormService.options[i].selected = false;
	}
	siteFormEvent.className                 = '';
	siteFormService.className               = 'setDisabled';
	objId( 'siteFormMonthStart' ).className = objId( 'siteFormMonthStart' ).className.replace( 'setDisabled', '' ).trim();
	objId( 'siteFormMonthEnd' ).className   = objId( 'siteFormMonthEnd' ).className.replace( 'setDisabled', '' ).trim();
	objId( 'siteFormDayStart' ).className   = objId( 'siteFormDayStart' ).className.replace( 'setDisabled', '' ).trim();
	objId( 'siteFormDayEnd' ).className     = objId( 'siteFormDayEnd' ).className.replace( 'setDisabled', '' ).trim();
	objId( 'siteFormYearStart' ).className  = objId( 'siteFormYearStart' ).className.replace( 'setDisabled', '' ).trim();
	objId( 'siteFormYearEnd' ).className    = objId( 'siteFormYearEnd' ).className.replace( 'setDisabled', '' ).trim();
}

// scSiteFormService()
function scSiteFormService()
{
	var siteFormEvent   = objId( 'siteFormEvent' );
	var siteFormService = objId( 'siteFormService' );
	if ( !siteFormEvent )
	{
		return;
	}
	for ( var i = 0, len = siteFormEvent.options.length; i < len; i++ )
	{
		siteFormEvent.options[i].selected = false;
	}
	siteFormService.className                   = '';
	siteFormEvent.className                     = 'setDisabled';
	objId( 'siteFormMonthStart' ).selectedIndex = 0;
	objId( 'siteFormMonthEnd' ).selectedIndex   = 0;
	objId( 'siteFormDayStart' ).selectedIndex   = 0;
	objId( 'siteFormDayEnd' ).selectedIndex     = 0;
	objId( 'siteFormYearStart' ).selectedIndex  = 0;
	objId( 'siteFormYearEnd' ).selectedIndex    = 0;
	objId( 'siteFormMonthStart' ).className     += ' setDisabled';
	objId( 'siteFormMonthEnd' ).className       += ' setDisabled';
	objId( 'siteFormDayStart' ).className       += ' setDisabled';
	objId( 'siteFormDayEnd' ).className         += ' setDisabled';
	objId( 'siteFormYearStart' ).className      += ' setDisabled';
	objId( 'siteFormYearEnd' ).className        += ' setDisabled';
}

// scSiteFormCity()
function scSiteFormCity( e )
{
	if ( !window.currId || ( currId != 'index' && currId != 'search' ) )
	{
		return;
	}
	if ( !e )
	{
		var e = window.event;
	}
	switch ( e.type )
	{
		case 'focus':
			if ( this.value != '' )
			{
				this.value = '';
			}
			break;
		case 'blur':
			if ( this.value == '' )
			{
				this.value = this.defaultValue;
			}
			break;
	}
}

// scSiteSubmissionSwitchSelect()
function scSiteSubmissionSwitchSelect()
{
	var self = objId( 'siteSubmissionSwitchSelect' );
	if ( !self )
	{
		return;
	}
	var siteSubmissionEvent             = objId( 'siteSubmissionEvent' );
	var siteSubmissionEventTitle        = objId( 'siteSubmissionEventTitle' );
	var siteSubmissionService           = objId( 'siteSubmissionService' );
	var siteSubmissionServiceTitle      = objId( 'siteSubmissionServiceTitle' );
	siteSubmissionEvent.style.display        = 'none';
	siteSubmissionEventTitle.style.display   = 'none';
	siteSubmissionService.style.display      = 'none';
	siteSubmissionServiceTitle.style.display = 'none';
	switch ( self.value )
	{
		case 'event':
			siteSubmissionEvent.style.display      = 'block';
			siteSubmissionEventTitle.style.display = 'block';
			break;
		case 'service':
			siteSubmissionService.style.display      = 'block';
			siteSubmissionServiceTitle.style.display = 'block';
			break;
	}
}

// scLinkInWindow()
function scLinkInWindow( e )
{
	window.open( this.href );
	killDefault( e );
}

// scChangeUserLinks()
function scChangeUserLinks( path )
{
	var siteHeaderNavLoginAccount         = objId( 'siteHeaderNavLoginAccount' );
	var siteHeaderNavRegisterLogout       = objId( 'siteHeaderNavRegisterLogout' );
	siteHeaderNavLoginAccount.title       = 'Manage Your Account';
	siteHeaderNavLoginAccount.href        = 'account.html';
	siteHeaderNavLoginAccount.innerHTML   = siteHeaderNavLoginAccount.title;
	siteHeaderNavRegisterLogout.title     = 'Log Out';
	siteHeaderNavRegisterLogout.href      = path + 'index.php?logout';
	siteHeaderNavRegisterLogout.innerHTML = siteHeaderNavRegisterLogout.title;
}

// scChangeAdminLinks()
function scChangeAdminLinks( path )
{
	var siteHeaderNavLoginAccount         = objId( 'siteHeaderNavLoginAccount' );
	var siteHeaderNavRegisterLogout       = objId( 'siteHeaderNavRegisterLogout' );
	siteHeaderNavLoginAccount.title       = 'Manage Your Service';
	siteHeaderNavLoginAccount.href        = path + 'index.php';
	siteHeaderNavLoginAccount.innerHTML   = siteHeaderNavLoginAccount.title;
	siteHeaderNavRegisterLogout.title     = 'Log Out';
	siteHeaderNavRegisterLogout.href      = path + 'index.php?logoutAdmin';
	siteHeaderNavRegisterLogout.innerHTML = siteHeaderNavRegisterLogout.title;
}

// scInfoRelay()
function scInfoRelay( scMessage, scInputs, scErrors )
{
	var body = document.getElementsByTagName( 'body' )[0];
	if ( scInputs != null || scErrors != null || scMessage != null )
	{
		body.style.filter  = 'alpha( opacity=45 )';
		body.style.opacity = '.45';
	}
	if ( scInputs != null )
	{
		for ( key in scInputs )
		{
			var elem = objId( key );
			if ( elem && elem.id && elem.type != 'password' )
			{
				//elem.value = scInputs[key];
				objSetVal( elem.id, scInputs[key], '' );
			}
		}
	}
	if ( scErrors != null )
	{
		var errorLen = scErrors.length;
		if ( errorLen )
		{
			var errorStr = 'Sorry, ' + errorLen + ' error' + ( errorLen == 1 ? ' was' : 's were' ) + ' found:';
			for ( key in scErrors )
			{
				errorStr += '\n- ' + scErrors[key];
			}
			alert( errorStr );
		}
	}
	if ( scMessage != null )
	{
		alert( scMessage );
	}
	body.style.filter  = '';
	body.style.opacity = '';
}

// scTextAreaLimit()
function scTextAreaLimit( textAreaId, counterId, limit )
{
	var limit = parseInt( limit );
	if ( textAreaId && limit )
	{
		if ( textAreaId.value.length > limit )
		{
			textAreaId.value = textAreaId.value.substring( 0, limit );
			return;
		}
		var charsLeft   = limit - textAreaId.value.length;
		var plural      = charsLeft == 1 ? '' : 's';
		var charMessage = 'Characters remaining: <strong>' + charsLeft + '</strong>';
		if ( counterId )
		{
			counterId.innerHTML = charMessage;
		}
	}
}

// String.parseDate()
String.prototype.parseDate = function()
{
	var months   = new Array( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' );
	var dateArr  = this.split( '-' );
	var showDate = new Date();
	showDate.setYear( dateArr[0] );
	showDate.setMonth( dateArr[1] > 0 ? dateArr[1] - 1 : 11 );
	showDate.setDate( dateArr[2] );
	return months[ showDate.getMonth() ] + ' ' + showDate.getDate() + ', ' + showDate.getFullYear();
}

// String.nl2br()
String.prototype.nl2br = function()
{
	return this.replace( /([^>])\n/g, '$1<br />\n' );
}

// String.trim()
String.prototype.trim = function()
{
	return this.replace( /(^[\s\xA0]+|[\s\xA0]+$)/g, '' );
}

// resultsRow()
// Used in search results
function resultsRow( title, content, def, tags )
{
	var content = content.toString() == '' ? def : content;
	var content = content.toString().trim().nl2br();
	var tags    = tags == null ? new Array : tags.toString().split( /\s*,\s*/ );
	for ( var i = 0, len = tags.length; i < len; i++ )
	{
		content = '<' + tags[i] + '>' + content + '</' + tags[i] + '>';
	}
	var resTableTr  = document.createElement( 'tr' );
	var resTableTh  = document.createElement( 'th' );
		resTableTh.innerHTML = title.toString();
	var resTableTd  = document.createElement( 'td' );
		resTableTd.innerHTML = content;
	resTableTr.appendChild( resTableTh );
	resTableTr.appendChild( resTableTd );
	return resTableTr;
}

// scInit()
function scInit()
{
	addListener( objId( 'siteFormEvent' ), 'focus', scSiteFormEvent );
	addListener( objId( 'siteFormMonthStart' ), 'focus', scSiteFormEvent );
	addListener( objId( 'siteFormMonthEnd' ), 'focus', scSiteFormEvent );
	addListener( objId( 'siteFormDayStart' ), 'focus', scSiteFormEvent );
	addListener( objId( 'siteFormDayEnd' ), 'focus', scSiteFormEvent );
	addListener( objId( 'siteFormYearStart' ), 'focus', scSiteFormEvent );
	addListener( objId( 'siteFormYearEnd' ), 'focus', scSiteFormEvent );
	addListener( objId( 'siteFormService' ), 'focus', scSiteFormService );
	addListener( objId( 'siteFormCity' ), 'focus', scSiteFormCity );
	addListener( objId( 'siteFormCity' ), 'blur', scSiteFormCity );
	// Solid Cactus link
	addListener( objId( 'siteSolidCactusLink' ), 'click', scLinkInWindow );
	// Select years
	scSiteFormYear( 'siteFormYearStart' );
	scSiteFormYear( 'siteFormYearEnd' );
	scSiteFormYear( 'siteFormEventStartYear' );
	scSiteFormYear( 'siteFormEventEndYear' );
	// Limit description fields on submit.html
	var scTextAreaToLimitEvent        = objId( 'siteFormEventDescription' );
	var scTextAreaToLimitCountEvent   = objId( 'siteFormEventDescriptionCount' );
	var scTextAreaToLimitService      = objId( 'siteFormServiceDescription' );
	var scTextAreaToLimitCountService = objId( 'siteFormServiceDescriptionCount' );
	if ( scTextAreaToLimitEvent )
	{
		addListener( scTextAreaToLimitEvent, 'keyup', function() {
			scTextAreaLimit( scTextAreaToLimitEvent, scTextAreaToLimitCountEvent, 1000 );
		} );
		addListener( scTextAreaToLimitEvent, 'keydown', function() {
			scTextAreaLimit( scTextAreaToLimitEvent, scTextAreaToLimitCountEvent, 1000 );
		} );
	}
	if ( scTextAreaToLimitService )
	{
		addListener( scTextAreaToLimitService, 'keyup', function() {
			scTextAreaLimit( scTextAreaToLimitService, scTextAreaToLimitCountService, 1000 );
		} );
		addListener( scTextAreaToLimitService, 'keydown', function() {
			scTextAreaLimit( scTextAreaToLimitService, scTextAreaToLimitCountService, 1000 );
		} );
	}
	if ( scTextAreaToLimitEvent )
	{
		scTextAreaLimit( scTextAreaToLimitEvent, scTextAreaToLimitCountEvent, 1000 );
	}
	if ( scTextAreaToLimitService )
	{
		scTextAreaLimit( scTextAreaToLimitService, scTextAreaToLimitCountService, 1000 );
	}
}

// Add event listeners
//addListener( window, 'load', scSiteFormService );
//addListener( window, 'load', scSiteFormEvent );
addListener( window, 'load', scInit );