// TASER.js
// Date Created: December 2006
// Author: Avanade TASER.com Team
// Description: Contains common scripts used across the TASER.com website.


var myCounter = 0;
var loaded = false; // BUG FIX for FireFox. 1/11/2007

function taserOnLoad() // Fired by SharePoint on load.
{
/*
	if(!loaded)
	{
		makeRound(); // Make round corners on divs.	
				
		loaded = true;
		// initDHTMLAPI();
	}
*/	
	//Search box
	var searchBox = document.getElementById("searchInput");

	if(searchBox != null)
	{
		if(isEmpty(searchBox.value) || isWhitespace(searchBox.value) || searchBox.value == "Search TASER.com")
		{
			searchBox.value = "Search TASER.com";
			searchBox.className = "searchBlur";
		}
	}	 
}

function dltypeof( vExpression )
{	
	var sTypeOf = typeof vExpression;
	if( sTypeOf == "function" )
	{
		var sFunction = vExpression.toString();
		if( ( /^\/.*\/$/ ).test( sFunction ) )
		{
			return "regexp";
		}
		else if( ( /^\[object.*\]$/i ).test( sFunction ) )
		{
			sTypeOf = "object"
        }
	}
	if( sTypeOf != "object" )
	{
		return sTypeOf;
	}
	
	switch( vExpression )
	{
		case null:
			return "null";
		case window:
			return "window";
		case window.event:	
			return "event";
	}
	
	if( window.event && ( event.type == vExpression.type ) )
	{
		return "event";
	}
	
	var fConstructor = vExpression.constructor;
    if( fConstructor != null )
	{
		switch( fConstructor )
		{																	
			case Array:
				sTypeOf = "array";
				break;
			case Date:
				return "date";
			case RegExp:
				return "regexp";
			case Object:
				sTypeOf = "jsobject";
				break;
			case ReferenceError:
				return "error";
			default:
				var sConstructor = fConstructor.toString();
				var aMatch = sConstructor.match( /\s*function (.*)\(/ );
				if( aMatch != null )
				{
					return aMatch[ 1 ];
				}
			
		}
	}

	var nNodeType = vExpression.nodeType;
	if( nNodeType != null )
	{	
		switch( nNodeType )
		{
			case 1:
				if( vExpression.item == null )
				{
					return "domelement";
				}
				break;
			case 3:
				return "textnode";
		}
	}
	
	if( vExpression.toString != null )
	{
		var sExpression = vExpression.toString();
		var aMatch = sExpression.match( /^\[object (.*)\]$/i );
		if( aMatch != null )	
		{
			var sMatch = aMatch[ 1 ];
			switch( sMatch.toLowerCase() )
			{
				case "event":
					return "event";
				case "math":
					return "math";
				case "error":	
					return "error";
				case "mimetypearray":
					return "mimetypecollection";
				case "pluginarray":
					return "plugincollection";
				case "windowcollection":
					return "window";
				case "nodelist":
				case "htmlcollection":
				case "elementarray":
					return "domcollection";
			}
		}
	}
	
	if( vExpression.moveToBookmark && vExpression.moveToElementText )
	{
		return "textrange";
	}
	else if( vExpression.callee != null )
	{
		return "arguments";
	}
	else if( vExpression.item != null )	
	{
		return "domcollection";
	}
	
	return sTypeOf;
}


//functions for the search box

function search()
{
	var searchBox = document.getElementById("searchInput");
	var searchValue = searchBox.value;
	
	if(isEmpty(searchValue) || isWhitespace(searchValue) || searchValue == "Search TASER.com")
	{
		alert("Please enter one or more search words.");
	}
	else
	{
		window.location = "http://www.taser.com/Search/Results.aspx?k=" + searchValue ;
	}
	
}

// whitespace characters 
var whitespace = " \t\n\r"; 

// Check whether string s is empty. 
function isEmpty(s) 
{ 
	return ((s == null) || (s.length == 0)) 
} 

// Check wether string is whitespace
function isWhitespace (s) 
{ 
var i; 

// Is s empty? 
if (isEmpty(s)) 
	return true; 

// Search through string's characters one by one 
// until we find a non-whitespace character. 
// When we do, return false; if we don't, return true. 

for (i = 0; i < s.length; i++) 
{ 
// Check that current character isn't whitespace. 
var c = s.charAt(i); 

if (whitespace.indexOf(c) == -1) return false; 
} 

// All characters are whitespace. 
return true; 
} 

function searchBoxFocus()
{
	var searchBox = document.getElementById("searchInput");
	var searchValue = searchBox.value;
	
	if(searchValue == "Search TASER.com")
	{
		searchBox.value = "";
		searchBox.className = "searchFocus";
	}
}

function searchBlur()
{
	var searchBox = document.getElementById("searchInput");
	var searchValue = searchBox.value;
	
	if(isEmpty(searchValue) || isWhitespace(searchValue))
	{
		searchBox.value = "Search TASER.com";
		searchBox.className = "searchBlur";
	}
	
}
/*********************END SEARCH FUNCTIONS*******************************************/ 

// Functions for Global Search Box
function clearTextValue(el, classname) {
	if (el.defaultValue==el.value) { el.value = ""; }
	
	if (el.style) { el.style.color = ""; } // Clear the style if supported
}

function setTextValue(el, text, classname){
	
	if(el.value == ""){
		el.value = text;
		if (el.style) { el.style.color = color; }
	}
}

/*
var makeRound = function(){
	var els = document.getElementsByTagName('div'); 
	for(var i=0; el=els[i]; i++)
	{			
		if(el.className.indexOf('round')>-1 && el.className.indexOf('roundManual') < 0 && el.firstChild && el.firstChild.className!='t'  )
		{
			//check if there is another <b> tag used for the round corners.
			//this test is needed for firefox since it passes the condition el.firstChild.className!='t' 
			//every time. Amer Marji (Avanade) 2/2/2007 
			var innerHTMLStart = el.innerHTML.substring(14,1).toLowerCase();
			if(innerHTMLStart != '<b class="t">'){
				el.innerHTML = '<b class="t"><b class="r"></b></b><div class="c"><b class="br"></b>'+ 
				el.innerHTML + '<b class="br"></b></div><b class="b"><b class="r"><!----></b></b>';	
			}
		}
	}
}
*/ 

// Function for showing / hiding the Answers in TASER FAQ pages. 
// Reference gathered from mechanism used behind the SharePoint RSS Reader webpart.
// Author: Alex Talarico
function toggleAnswer( answer ) {

   if(document.getElementById(answer).style.display=='none') {
      document.getElementById(answer).style.display='block';
   } 
   else {
      document.getElementById(answer).style.display='none';
   }
}


// Function for retrieving a value from the query string
// Reference gathered from http://www.activsoftware.com/code_samples/code.cfm/CodeID/59/JavaScript/Get_Query_String_variables_in_JavaScript
// Author: ActiveSoftware, modified / customized by Alex Talarico
function getQueryVariable(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0; i<vars.length; i++) {
    var pair = vars[i].split("=");
    if ( pair[0].toUpperCase() == variable.toUpperCase() ) {
      return pair[1];
    }
  } 
  return null;
}

// Function for setting the currently selected state for training events
// Author: Alex Talarico
function setSelectedStateCSS( ) {

	var state = getQueryVariable( 'state' );
	
	if ( state != null )
	{
		var selState = document.getElementById( state );
	}
	else // if the query string state is not found default to AZ
	{
		selState = document.getElementById( 'AZ' );
	}
	
	selState.setAttribute("class", "selectedTrainingState");
	selState.setAttribute("className", "selectedTrainingState"); 
}



// Function for swapping training calendar list url with custom url
// used for linking the dataview calendar event link to a custom details page.
// Author: Elmer Morales (slightly revised by Alex Talarico to swap ID w/ EventID)
function swapDivLinksUrl(oldUrl, newUrl, tagToReplace)
{
	// alert(tagToReplace);
	var els = document.getElementsByTagName(tagToReplace);
	
	for(var i=0; i < els.length; i++)
	{
		var el = els[i];

		if ( el.getAttribute("href").indexOf(oldUrl) >- 1 )
		{		
			var href= el.getAttribute("href");
			href = href.replace(oldUrl, newUrl);
			el.setAttribute("href", href);

			//el.removeEvent('onclick',GoToLink);
			el.onclick = null;
		}
	}
}