var JQ = jQuery.noConflict();

sparq._d = new Date();
sparq.expires = sparq._d*24*60*1000;
(function($) {
	$.extend(true, sparq.user_urls, {
		'default': {
			'out': site_data.base_secure_url + '/nikeos/p/' + site_data.site_folder + '/' + site_data.lang_locale + '/profile?page=signin&fields=screenname&continueURL=' + NIKEOS.currentURL
		},
		'athlete': {
			'in': site_data.site_url + '/athlete_dashboard',
			'rate': site_data.site_url + '/athlete_dashboard#rate',
			'microsite': '#leaderboard'
		},
		'coach': {
			'in': site_data.site_url + '/coach_dashboard',
			'rate': site_data.site_url + '/coach_dashboard#rate',
			'microsite': '#get_started',
			'navItems': {
				compare: 'coach_dashboard',
				rate: 'rate'
			}
		},
		'trainer': {
			'in': site_data.site_url + '/trainer_dashboard',
			'rate': site_data.site_url + '/trainer_dashboard#rate',
			'microsite': '#get_started',
			'navItems': {
				compare: 'trainer_dashboard',
				rate: 'rate'
			}
		},
		'undefined': {
			'in': site_data.site_url,
			'out': site_data.site_url
		}
	});

	$.extend(true,sparq.info,{
		methods: {
			id: 'getProfile',
			email: 'getSPARQId',
			create: 'createSPARQuser',
			update: 'updateProfile',
			'list_events': 'list',
			schools: 'list',
			createSession: 'sessions.create',
			tags: 'improve.tagSearch'
		},
		registration: {
			athletes: '',
			coaches: '',
			trainers: ''	
		},
		params: {
			id: 'id',
			email: 'email',
			create: 'regObj',
			update: 'regObj',
			'list_events': ['proximity_zip', 'proximity', 'proximity_unit'],
			schools: 'postalcode',
			createSession: ['sid','athlete_id']
		},
		domains: {
			prod: 'nike.com',
			staging: 'nike.com',
			dev: 'rga.com'
		}
	});
	window.helpers = $.extend(true, {}, {
		name: 'helpers',
		fonts : {
			path: '/sparqtraining/global/swf/sifr/',
			colors: {
				black: '#000000',
				green: '#c9fe00',
				white: '#ffffff'
			},
			din: {
				black: 'dinpro-black',
				bold: 'dinpro-bold',
				light: 'dinpro-light',
				med: 'dinpro-med',
				reg: 'dinpro-reg'
			}
		},
		domains: {
			prod: 'nike.com',
			staging: 'nike.com',
			dev: 'rga.com'
		},
		date: new Date(),
		is_brand: function() {
			return site_data.brand != 'sparqtraining' ? true : false;
		},
		is_array: function(obj) {
			return !(typeof(obj) != 'object' || typeof(obj.length) != 'number');
		},
		is_value_valid: function(val) {
			return (val != 'null' && val != null && val != -1 && val != '' && typeof val != 'undefined') ? true : false;
		},
		return_clean_url: function(url) {
			var u = url;
			var return_url = u.replace(/(\w)(\/)+/gi, '$1/');
			return return_url;
		},
		return_debug_status: function() {
			return (/(\&|\?)jsdebug/i).test(window.location.search);
		},
		return_brand: function() {
			return site_data.brand || site_data.site_folder;
		},
		return_site_url: function() {
			var brand = this.return_brand();
			var strs = [site_data.base_url, '/nikeos/p/', brand, '/', site_data.lang_locale, '/'];
			NIKEOS.log('%s: return_site_url()...', this.name, strs);
			return strs.join('');
		},
		return_blog_url: function() {
			var base = site_data.settings ? site_data.settings.blog_base_url : site_data.blog_base_url;
			var brand = this.return_brand();
			var strs = [base, '/blogs/', brand, '-', site_data.lang_locale, '/'];
			return strs.join('');
		},
		return_random_number: function(range) {
			var multiplier = range || 100;
			return Math.round(Math.random(multiplier) * 100); // need to multiply by 100 always 
		},
		return_scroll_height: function() { // http://www.codehouse.com/javascript/articles/scroll_area/
		   return window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0;
		},
		return_scroll_width: function() { // http://www.codehouse.com/javascript/articles/scroll_area/
		   return window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0;
		},
		return_true_obj_type: function(obj, type) {
			/* 
				@obj	- JS object to check
				@type	- RegExp STRING for true type to check against
						- ie: 'regexp', 'string', 'array'
			*/
			var t = type || 'object';
			var reg = new RegExp(t, 'i');
			return reg.test(obj.constructor.toString());
		},
		remove_white_space: function(str) { // this is a pretty specific method for srch terms
			if (typeof str !== 'string') return str;
			var tmp = str.split(' ');
	    	return tmp.join('');
		},
		replace_encoded_newlines: function(str) {
			return str.replace(/(%0A)/gi, '\\n');
		},
		replace_newlines: function(str) {
			var lineTest = new RegExp('\\n', 'g');
			NIKEOS.log('new line stuff: ', lineTest.test(str));
			return str.replace(lineTest,'\\\\n');
		},
		check_for_newlines: function(str) {
			var lineTest = new RegExp('\\n', 'g');
			return lineTest.test(str);
		},
		check_sport_id: function(val) {
			return val.search(/\-/) > -1 ? true : false;
		},
		check_url: function(url) {
			var isUrl = /^https?:\/\/(([0-9a-zA-Z\-])*\.)+([a-zA-Z]{2,9})$/i;
			return isUrl.test(url);
		},
		check_email: function(email) {
			NIKEOS.log('%s check_email()...', this.name);
			var matched = false;
			if (typeof email === 'string') {
				var _e = this.trim(email);
				if (typeof(_e) === 'string' && this.string_contains(_e,['@','.'])) {
					matched = (/^([\w]*[(\-|\.)??\w]?)*@(([0-9a-zA-Z\-])*\.)+([a-zA-Z]{2,9})$/i).test(_e);
				}
			}
			return matched;
		},
		check_int: function(number) {
			NIKEOS.log('%s check_int()...', this.name);
			return parseFloat(number) != 'NaN' && parseFloat(number) != NaN ? true : false;
		},
		check_status: function() {
			NIKEOS.log('%s check_status()...', this.name);
			var is_logged_in = $.cookie('id.nike.com') && (tracking.logged_in_status == 'logged in') ? true : (tracking.logged_in_status == 'logged in') ? true : false;
			return is_logged_in;
		},
		change_continue_url: function() {
			NIKEOS.log('%s change_continue_url()...', this.name);
			var cur_url = NIKEOS.currentURL;
			var cur_redirect = cur_url.split('/').pop();
			var logged_in_redirect = '/';
			return cur_url.replace(cur_redirect,logged_in_redirect);
		},
		trim: function(str) {
			return str.replace(/^\s*|\s*$/g,'');
		},
		truncate: function (str,len,start) {
			NIKEOS.log('%s truncate()...', this.name);
			/*
				@str (required)		- STRING - string to truncate
				@len (optional)		- NUMBER - length to truncate
				@start (optional)	- NUMBER - index number to start truncate, requires len
			*/
			if (!len) return str;
			else if (!start) return str.substring(0,len) + '...';
			else return str.substring(start,len) + '...';
		},
		max_characters: function(str,len) {
			return str.substring(0,len);	
		},
		textarea_counter: function(limit, cur_count, $count_el) {
			var len = cur_count;
			var $counter = $count_el;
			var chars_left = limit - cur_count;
			$counter.text(chars_left);
		},
		maintain_mode: function() {
			var is_debug = this.return_debug_status();
			if (NIKEOS.site_mode != 'prod') {
				var sAmp = '&';
				var sQm = '?';
				var sDebug = 'jsdebug';
				var rAmpy = /&/g;
				var rHashy = /#/g;
				var rDebug = new RegExp(sDebug, 'gi');
				var $arr = $('body').find('a') || [];
				if ($arr.length > 0 && is_debug) {
					$.each($arr, function(i,a) {
						var holder = [];
						var $a = $(a);
						var sHref = $a.attr('href');
			
						var is_ampy = rAmpy.test(sHref);
						var is_hashy = rHashy.test(sHref);
						var has_debug = rDebug.test(sHref);
			
						if (has_debug) return;
						if (is_ampy && is_hashy) {
						    var _href = sHref.split(rHashy);
						    holder.push(_href[0]);
						    holder.push(sAmp);
						    holder.push(sDebug);
						    holder.push(_href[1]);
						    NIKEOS.log(holder);
						} else if (is_ampy) {
						    holder.push(sHref);
						    holder.push(sAmp);
						    holder.push(sDebug);
						    NIKEOS.log('is ampy: ', holder);
						} else if (is_hashy) {
						    var _href = sHref.split(rHashy);
						    holder.push(_href[0]);
						    holder.push(sQm);
						    holder.push(sDebug);
						    holder.push(_href[1]);
						    NIKEOS.log('is hashy: ', holder);
						}
						sHref = holder.join('');
						NIKEOS.log(sHref);
						$a.attr('href', sHref);
					});
				}
			}
		},
		replace_token_with_cookies: function(aArr, sStr, bSparq, rRegexp, sModifiers, oAddMatches) {
			/*
				@aArr	- ARRAY of tokens ({\w+}) to match
				@sStr	- STRING to use for replacement
				@bSparq - BOOL for sparq only, defaults to true
				@rRegexp	- RegExp STRING used to remove extraneous values from tokens
				@sModifiers	- STRING of RegExp modifiers
				@oAddMatches	- OBJECT of additional matches to put the strings against with key/value pairs
			*/
			var arr = aArr;
			var _str = sStr;
			var sparq = bSparq;
			var regexp = rRegexp;
			var modifiers = sModifiers;
			var addMatches = oAddMatches;
			
			var reg = this.return_true_obj_type(regexp, 'regexp') ? regexp : new RegExp(regexp || '\\W+', modifiers || 'gi');
			var onlySparq = sparq == false ? false : true;
			var arrLen = arr.length;
			for (var i=0; i < arrLen; i++) {
				var rep = arr[i];
				var replaced = rep.replace(reg, '');
				var cookie = onlySparq ? $.cookie('sparq.' + replaced) : $.cookie(replaced) || $.cookie('sparq.' + replaced);
				if (typeof addMatches == 'object') {
					var addMatchReg = new RegExp(arr[i], 'i');
					for (var p in addMatches) {
						if(p.match(addMatchReg)) {
							cookie = addMatches[p];
						}
					}
				}
				_str = _str.replace(rep, cookie);
			}
			return _str;
		},
		create_cookie: function(name,value,useSparq,prefix,expires) {
			NIKEOS.log('%s create_cookie()...', this.name);
			/*
				@name (required)		- STRING - name of cookie to create, no SPARQ prefix required
				@value (required)		- MIXED (STRING/NUMBER) - value to apply to @name
				@useSparq (optional)	- BOOL (true/false) - defaults to true, only needed if 
														  cookie should NOT have sparq. prefix
				@prefix (optional)		- STRING - value of prefix, @sparq = false
				@expires (optional)		- STRING - value of when cookie should expire
			*/
			var isSparq = (useSparq == false) ? false : true; // useSparq || true; //
			var n = (isSparq) ? 'sparq.' + name : (!isSparq && prefix) ? prefix + name : name;
			var exp = expires || 7; // default to set cookie to expire in 7 days - more of an IE fix than anything else
			return $.cookie(n, value, { path: '/', domain: this.domains[NIKEOS.site_mode], expires: exp }); //sparq.info.domains[NIKEOS.site_mode]
		},
		delete_cookie: function(name,useSparq,prefix) {
			NIKEOS.log(this.name, ' delete_cookie()...', name);
			/*
				@name (required)		- STRING - name of cookie to delete, no SPARQ prefix required
				@useSparq (optional)	- BOOL (true/false) - defaults to true, only needed if 
														  cookie should NOT have sparq. prefix
				@prefix (optional)		- STRING - value of prefix, @sparq = false
			*/
			
			var isSparq = (useSparq == false) ? false : true;
			var n = (isSparq) ? 'sparq.' + name : (!isSparq && prefix) ? prefix + name : name;
			$.cookie(n, null, { path: '/', domain: this.domains[NIKEOS.site_mode] }); //sparq.info.domains[NIKEOS.site_mode]
			return;
		},
		string_contains: function(string, search) {
			NIKEOS.log('%s string_contains()...', this.name);
			/*
				@string (required)	- STRING - string to search
				@search (required)	- MIXED (string/array) - string or array of values 
															 to search @string with
			*/
			var j = typeof(search) == 'string' ? $.makeArray(search) : search; //convert into array if string
			var k = []; //prob not best technique, but create an array of values to check against
			$.each(j, function(i,a){
				k.push(string.indexOf(a));
			});
			// backwards logic here, but if it is in the array, indexOf occurence is pushed into k (a)
			// if it is not in the array, then -1 gets pushed into k (b)
			// so if (a) happens, it will not have -1 in the k array
			return $.inArray(-1, k) < 0 ? true : false;
		},
		remove_duplicates: function(arr) {
			/*
				@arr (required)     - ARRAY - array to clean up
			*/	
			if (!this.is_array(arr)) {
				NIKEOS.log('The object is not an array');
				return false;
			}
	
			var r = new Array();
			o:for(var i = 0, n = arr.length; i < n; i++) {
				for(var x = 0, y = r.length; x < y; x++) {
					if(r[x]==arr[i]) continue o;
				}
				r[r.length] = arr[i];
			}
			NIKEOS.log('remove_dupes: ', r);
			return r;
		},
		ext: function(file,swap) {
			NIKEOS.log('%s ext()...', this.name);
			/*
				@file (required)	- STRING - file src
				@swap (required)	- STRING - file to swap with @file
			*/
			// returns an array of the original image and the image to swap out
			var _og = file, // keep reference to original image
				_p = '', // store file to extract path
				_file = file, // src image to modify
				_swap = swap, // src image to swap in
				_http = (_file.match(/http(s?):\/\//) != null) ? true : false,
				_path_type = (_swap.indexOf('/') == 0) ? 'root' : 'relative', // is this image relative or root relative
				_ext = (_swap.indexOf('.') > -1) ? true : false, // does swap image have an extension
				_ie = (_http) ? true : false,
				_secure = (_http == null) ? 0 : (_http[1] == 's') ? 7 : 6,
				_return = [_og]; // array to return
	
			//create the url to send back
			_p = (_file.indexOf('/') > -1) ? _file.split('/') : -1;
			
			var _pL = _p.length;
			var _path = ''; // path to image
			if (_pL > 0) {
				for (var i=0; i < _pL; i++) {
					_path += (_p[i].indexOf('.') < 0) ? _p[i] + '/' : '';
				}
			}
	
			//create the new image src ref
			var _src = (_file.indexOf('/') > 0) ? _file.split('/').pop() : _file,
				_split = _src.split('.'),
				_img_name = _split[0],
				_img_ext = _split[1],
				_swap_ext = (_ext) ? _swap : _swap + '.' + _img_ext,
				_new = (_ext && _path_type == 'relative') ? _path + _swap_ext : (_path_type == 'root') ? _swap_ext : _img_name + _swap_ext;
			_return.push(_new);
			_return.push(_http);
			_return.push(_secure);
			return _return;
			// returns in the following order: 
			// [og, swap, ie mode (boolean), secure substring]
		},
		make_searchable: function (el, qClass, page, searchable) {
			NIKEOS.log('%s make_searchable()...', this.name);
			/*
				@el (required)			- STRING - element class or id to make clickable that will submit search
				@qClass (required)		- STRING - element class to build query string out of 
				@page (required)		- STRING - different page to submit query to
				@searchable (optional)	- BOOL (true/false)
				// not sure if @searchable is optional or required.  will look into it
			*/
			var $el = $(el), qc = qClass, href = page;
			NIKEOS.log(el, qClass, page, searchable);
			if (!searchable) {
				NIKEOS.log('not searchable - el in make !searchable: ', $el);
				$($el).addClass('notclickable').bind('click', function(e) {
					e.preventDefault();
					return false;
				});
			} else {
				NIKEOS.log('ok, now searchable - el in make searchable: ', $el);
				this.date = new Date();
				var queryArr = [];
				var isdebug = helpers.return_debug_status();
				var new_location = '';
				var q = (href.indexOf('?') < 0) ? '?' : '&';
				var $qc = $(qc);
				var hasHref = new RegExp('^' + href, 'i');
				queryArr.push(href);
				queryArr.push(q);
				NIKEOS.log('isdebug: ', isdebug);
				$el.removeClass('notclickable').bind('click', function(e) {
					e.preventDefault();
					queryArr.push(helpers.return_query_string($qc, true));
					new_location = (!hasHref.test(new_location)) ? queryArr.join('') : new_location;
					NIKEOS.log('redirecting...', new_location);
					if (new_location.length > 0) {
						if (!isdebug) window.location.href = new_location;
					}
					return false;
				});
			}
		},
		return_login_redirect : function() {
			var slash = '/';
			var prefix = '/nikeos/p/';
			var login = [NIKEOS.BASE[NIKEOS.site_mode].replace('http:', 'https:'), prefix, site_data.brand, slash, site_data.lang_locale, 
				'/profile?page=sparq_update&continueURL=http%3A//', NIKEOS.siteHost, prefix, site_data.brand, slash, site_data.lang_locale, slash];
			return login.join('');
		},
		return_query_string: function(obj, buster, key_separator, val_separator) {
			/*
				@obj						- OBJECT - array of input elements, or json object 
				@buster (optional)			- BOOL - cache buster to end of query string, defaults to false
				@key_separator (optional)	- STRING - separator of keys, defaults to '&'
				@val_separator (optional)	- STRING - separator of key/value pairs, defaults to '='
			*/
			var str = '';
			var ks = key_separator || '&';
			var vs = val_separator || '=';
			var qArr = [];
			var clearcache = !!buster;
			var is_array = this.is_array(obj);
			if (is_array) {
				$.each(obj, function(i,a) {
					var $a = $(a);
					var val = $a.val();
					var name = $a.attr('name');
					//CA postal code: V5Y 1M7, hacky, but works
					var query = name + vs + (name == 'postalcode' ? val.replace(' ', '_') : val);
					qArr.push(query);
				});
				if (clearcache) {
					var rand = this.return_random_number();
					qArr.push('oem=' + rand);
				}
				return qArr.join(ks);
			} else if (typeof obj == 'object' && !is_array) {
				for (var p in obj) {
					//CA postal code: V5Y 1M7, hacky, but works
					var val = p + vs + (p == 'postalcode' ? obj[p].replace(' ', '_') : obj[p]);
					qArr.push(val);
				}
				if (clearcache) {
					var rand = this.return_random_number();
					qArr.push('oem=' + rand);
				}
				return qArr.join(ks);
			}
			return false;
		},
		return_sparq_id: function(obj) {
			// pass in $response.item
			if (!obj) return false;
			var id = 0;
			for (var p in obj) {
				for (var q in obj[p]) {
					if (obj[p][q] == 'id') {
						var id = obj[p].text;
					}
				}
			}
			return id;
		},
		return_random_number: function() {
			var one = Math.round(((Math.random()*10)*(Math.random()*100)) / 3);
			var two = Math.round(((Math.random()*10)*(Math.random()*100)) / 3);
			return one * two;
		},
		create_obj: function(obj,check) {
			NIKEOS.log('%s create_obj()...', this.name);
			/*
				@obj (required)		- OBJECT - JSON object stored in an array 
				@check (optional) 	- OBJECT (array) - array of values to check against
			*/
			var o = {};
			NIKEOS.log('create obj: ', obj);
			NIKEOS.log('check arr: ', check);
			var objLen = obj.length;
			for (var i = 0; i < objLen; i++) {
				var objI = obj[i];
				var name = objI['name'];
				var value = objI['value'];
				NIKEOS.log(name, ' : ', value);
		        if (this.is_value_valid(value)) {
		        	NIKEOS.log('\t', $.inArray(name, check));
		        	var replaceNewline = this.replace_newlines(value);
		        	if (!check) {
		        		var val = this.check_email(replaceNewline) ? replaceNewline : encodeURIComponent(replaceNewline); //encodeURIComponent()
		        		val.replace('%20', ' ');
		        		o[name] = val;
		        	} else if ($.inArray(objI['name'], check) > -1) {
		        		var val = this.check_email(replaceNewline) ? replaceNewline : encodeURIComponent(replaceNewline); //encodeURIComponent()
		        		val.replace('%20', ' ');
		            	o[name] = val;
		            }
		        }
			}
			NIKEOS.log('this/helpers.create_obj ', o);
			return o;
		},
		create_data_string: function(obj) {
			if (typeof obj != 'object') return false;
			var str = '';
			for(var p in obj) {
				if (typeof obj[p] !== 'function') str += p + '=' + obj[p] + '&';
			}
			var return_str = str.substring(0,str.length-1);
			return return_str;
		},
		create_string_obj: function(obj,check) {
			NIKEOS.log('%s create_string_obj()...', this.name);
			/*
				@obj (required)		- OBJECT - serialized JSON object stored in an array 
											   (http://docs.jquery.com/Ajax/serializeArray)
				@check (optional) 	- OBJECT (array) - array of values to check against
			*/
			var sss = '', first = '{', last = '}', storage = [];
			NIKEOS.log('create string obj: ', obj);
			NIKEOS.log('check arr: ', check);
			for (var i = 0; i < obj.length; i++) {
				var name = obj[i].name;
				var value = obj[i].value;
				NIKEOS.log(name, ' : ', value);
				var isValid = this.is_value_valid(value);
		        if (isValid) {
		        	if (!check) {
		        		var val = (typeof value === 'number') ? value : this.check_email(value) ? '"' + value + '"' : '"' + encodeURIComponent(value) + '"'; //value.replace("'","\'") 
		        		val.replace('%20', ' ');
						storage.push('"' + name + '":' + val);
		        	} else if ($.inArray(name, check) > -1) {
			        	NIKEOS.log('\t', $.inArray(name, check));
		        		var val = (typeof value === 'number') ? value : this.check_email(value) ? '"' + value + '"' : '"' + encodeURIComponent(value) + '"'; //value.replace("'","\'") 
		        		val.replace('%20', ' ');
						storage.push('"' + name + '":' + val);
		            }
		        } else {
		        	storage.push('"' + name + '":' + '""');
		        }
			}
		    sss = first + storage.join(',') + last;
			NIKEOS.log('this/helpers.create_string_obj: ', sss);
			return sss;
		},
		create_query_string_obj: function(string, key_separator, val_separator) {
			/*
				@string (required)			- STRING - string to create query string out of
				@key_separator (optional)	- STRING - separator of keys, defaults to '&'
				@val_separator (optional)	- STRING - separator of key/value pairs, defaults to '='
			*/
			var str = string.match(/^(\?|#)/) != null ? string.substring(1) : string;
			var ksep = key_separator || '&';
			var vsep = val_separator || '=';
			var values = str.split(ksep);
			var valObj = {};
			$.each(values, function(i,a) {
				var input_val = a.split(vsep);
				NIKEOS.log(input_val);
				valObj[input_val[0]] = input_val[1];
			});
			return valObj;
		},
		limit_characters: function(field, type) {
			/*
				to do (12/29/09):
				- add limitsObj param to override defaults
				- switch function res to var res = function and see what happens
			*/
			
			var $field = $(field);
			var limits = {
				phone: '()- 0123456789',
				numb: '0123456789',
				alpha: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ '
			};
			function res(field,type){
				var w = '';
				var val = field.val();
				var valLen = val.length;
				for (i=0; i < valLen; i++) {
					x = val.charAt(i);
					if (limits[type].indexOf(x,0) != -1) w += x;
				}
				field.val(w);
			}
			res($field, type);
		},
		check_value: function(el) {
			if ($(el).length > 1) return false;
			var val = $(el).val();
			var hasNull = /.*\-?null$/i.test(val);
			return hasNull ? false : val; 
			// does the element have a "null" value, then return false so it doesn't pass validation
		},
		resize_frame: function(f) {
			var $frame = $(f);
			try {
				var h = $frame.contents() ? $frame.contents()[0].body.scrollHeight : $frame.contentDocument() ? $frame.contentDocument[0].body.scrollHeight : 500;
				$frame.css('height', h + 40);
			} catch(err) {
				console.log(err);
			}
		},
		new_window: function(url, options) {
			if (!url) {
				alert('no valid url');
				return false;
			}
			var stats = {
				menubar: 'no',
				status: 'no',
				toolbar: 'no',
				location: 'no',
				directories: 'no',
				resizable: 'yes',
				scrollbars: 'yes',
				width: 1024,
				height: 600,
				copyhistory: 'no',
				name: 'sparqpop'
			};
			/*
				titlebar: 'no' // ver 1.0
				directories: 'no', // ver 1.2
				screenX: 0 // ver 1.2
				screen&: 0 // ver 1.2
			*/
			$.extend(true, stats, options);
			var stat_string = '';
			for (var p in stats) {
				if (p != 'name') stat_string += p + '=' + stats[p] + ',';
			}
			stat_string = stat_string.substring(0,(stat_string.length-1));
			window.open(url, stats.name, stat_string);
		},
		blank_target: function(obj, name) {
			/* 
				@obj - must be jQuery object
			*/
			var name = name || 'sparqwindow';
			if (typeof obj != 'object') return false;
			
			// if (obj.hasOwnProperty) - do this later, work on nav/deeplink issue - 12/10
			
			obj.each(function(i,a) {
				var $a = $(a);
				$a.attr('target', name);
			});
		},
		compare_arrays: function(mainArr, testArr) {
		    if (mainArr.length != testArr.length) return false;
		    for (var i = 0; i < testArr.length; i++) {
		        if (this.compare_arrays(mainArr[i],testArr[i])) { 
		            if (!this.compare_arrays(mainArr[i], testArr[i])) return false;
		        }
		        if (mainArr[i] !== testArr[i]) return false;
		    }
		    return true;
		},
		convert_to_array: function(str,del) {
			var delimiter = del || ',';
			var newArr = [];
			var splitStr = str.split(delimiter);
			var splitLen = splitStr.length;
			for (var i=0;i<splitLen;i++) {
				var str = this.trim(splitStr[i]);
				newArr.push(str);
			}
			return newArr;
		},
		fire_trackClick: function(type, string, obj) {
			if (obj) $.extend(true, tracker_obj, obj);
			var subcat = (site_data.site_folder != "sparqtraining") ? "sparq>" : "";
			
			var newObj = $.extend(true, tracker_obj, {
				pageName: subcat + type + '>' + string
			});
			
			if(site_data.site_folder != "sparqtraining") {
				var p18 = newObj.prop18;
				newObj = $.extend(newObj, {
					prop18: "sparq",
					prop19: p18
				});
			}
			tracking.trackClick(newObj);
		},
		set_overlay_status: function() {
			// todo: push instances into array for easy dispolsal
			if (sparq.ui) {
				if (sparq.ui.overlay) {
					if (!sparq.ui.overlay.overlayCreated) {
						sparq.ui.overlay.createOverlay();
						sparq.ui.overlay.overlayCreated = true;
					}
					if (!sparq.ui.overlay.loaderCreated) sparq.ui.overlay.createLoader();
				}
			}
		},
		remove_overlay_status: function() {
			if (sparq.ui) {
				if (sparq.ui.overlay) {
					if (sparq.ui.overlay.overlayCreated) {
						sparq.ui.overlay.overlayCreated = false;
						sparq.ui.overlay.fadeOverlay();
					}
				}
			}
		},
		getIdFromObject: function(data) {
			var user_id = 0;
			var isJson = data.indexOf('{') == 0 ? true : false;
			var replaceNewlines = this.replace_newlines(data);
			var $response = isJson ? JSON.parse(replaceNewlines) : JQ.xml2json(replaceNewlines);
			if ($response.item) {
				for (var p in $response.item) {
					if (typeof $response.item[p] != 'function') {
						if ($response.item[p] == 'id') {
							user_id = $response.item[p].text;
						} else {
							for (var q in $response.item[p]) {
								if (typeof $response.item[p][q] != 'function') {
									if (q == 'name' && $response.item[p][q] == 'id') {
										user_id = $response.item[p].text;
									}
								}
							}
						}
					}
				}
			} else if ($response.response.hash) {
				if ($response.response.hash.id) user_id = $response.response.hash.id;
			}
			return user_id;
		},
		jsonCheck: function(data) {
			var user_id = 0;
			if (data) {
				NIKEOS.log('jsonCheck data: ', data);
				var isJson = data.indexOf('{') == 0 ? true : false;
				var replaceNewlines = this.replace_newlines(data);
				var $response = isJson ? JSON.parse(replaceNewlines) : JQ.xml2json(replaceNewlines);
				NIKEOS.log('jsonCheck response: ', $response);
				var isUserInfo = isJson && ($response.response.hash.guid || $response.response.hash.msg || $response.response.hash.id) ? false : true;
				NIKEOS.log(isUserInfo);
				var isSparqUserInfo = !isJson && $response.item.user ? true : false;
				var user_info = isJson && isUserInfo ? $response.response.hash.user.user : !isJson && isSparqUserInfo ? $response.item.user : !isUserInfo ? $response.response.hash : $response;
				NIKEOS.log('jsonCheck: ', $response);
				NIKEOS.log('user_info: ', user_info);
	
				user_id = this.getIdFromObject(data);
	
			}
			NIKEOS.log('user id: ', user_id);
			var returner = {
				isJson: isJson || false,
				response: $response,
				user_info: user_info,
				user_id: parseInt(user_id, 10)
			};
			
			return returner;
		},
		create_element: function(name, attrs) {
			/*
				@name	- STRING, name to give field
				@attr	- OBJECT, key (attribute) value (value of attribute) pairs
			*/
			if (!name) return false;
			var attrs = attrs || {};
			if (attrs.type && name == 'input') {
				var $el = (attrs.type == 'hidden') ? $('<input type="hidden" />') : $('<input />');
			} else {
				var $el = $('<' + name + '/>');
			}
			for (var p in attrs) {
				if (attrs[p]) {
					if (p != 'type' && attrs[p] != 'hidden') $el.attr(p, attrs[p]);
				}
			}
			return $el;
		},
		format_tracking_value: function(str) {
			str = str.split(" ").join("_");
			str = str.split("'").join("");
			str = str.toLowerCase();
			return str;	
		},
		log_me_out: function() {
			window.navListener.logoutSocial();
		},
		log_output: function(where,class_name,fn_name) {
			/*
				@where (required)		- STRING - either 'start' or 'end'
				@class_name (required)	- STRING - name of class being called from
				@fn_name (required) 	- STRING - name of function
			*/
			var w = where == 'start' ? '##### start %s, %s' : '----- end %s, %s';
			return NIKEOS.log(w, class_name, fn_name);
		}
	});

	window.animate = $.extend(true, {}, {
		show_sport : function(event) {
			$('#sport-selection').show();
		},
		hide_sport : function (event) {
			if (sparq.isRunning) return false;
			$('#sport-selection').hide();
		},
		fix_sports_header : function(event) {
			if (typeof sparq == 'object') {
				if (!sparq.sportHeaderFixed) {
					if (typeof sparq.ui != 'undefined') {
						if (sparq.useSifr) {
							if (typeof sparq.ui.sifr != 'undefined') {
								sparq.ui.sifr.createSifr(sparq.sportHeaderObj);
								sparq.sportHeaderFixed = true;
							}	
						} else if (sparq.useCufon) {
							if (typeof sparq.ui.cufon != 'undefined') {
								sparq.ui.cufon.createCufon(sparq.sportHeaderObj);
								sparq.sportHeaderFixed = true;
							}	
						}
					}
				} else {
					delete sparq.sportHeaderObj;
				}
			}
		},
		scrollUp: function() {
			$('html, body').animate({scrollTop:0}, 'fast');
		}
	});
})(jQuery);
// id tag, added 12/5/2011 to determine source of helpers.js file used in nikeos/p/usnikefootball/lang_LO/utilities/compress call.
