var search, searchForm;
var overrides = [];
_uacct = "UA-354449-5"; //set the web site tracker to default to blogs

initialize = function(){
	
  //initialize the Google search code 
  search = new GwebSearch();
  search.setSiteRestriction("010531249284259468954:kvkswabv6zi"); //use the custom search
  search.setNoHtmlGeneration();
  search.setSearchCompleteCallback(null, searchDisplay);
  search.setResultSetSize(GSearch.LARGE_RESULTSET);
  
  //create the searchform
  $('#searchform').html('');
  searchForm = new GSearchForm(false, document.getElementById('searchform'));
  searchForm.setOnSubmitCallback(document.getElementById('results'), searchExec);
  
  //call the autocomplete function when the user types
  $(searchForm.input).bind('keydown', autocomplete);

  //special code for guides to add drop shadows to images
  $(".bestpractices div.entry-body img, .features.individual div.entry-more img").wrap('<div class="wrap1"><div class="wrap2"><div class="wrap3"></div></div></div>');
  $('.entry-more .wrap1').css('margin-left', (646-$('.entry-more .wrap1').width())/2+'px')
  
  //find this blog's search overrides
  var dir = ''; //hold pathname for this website ...
  $(window.location.href
			.split('#')[0]
			.split('?')[0]
			.split('/')).each(
			function(slashCount){
				if (slashCount < 4 && typeof(this) != 'undefined'){dir = dir + this + '/'}
			}
	); //...minus page, category or date specific stuff. In short, we want 'http://blogs.salesforce.com/prm/' regardless of which part of the prm blog the user is on
	
	//affix identity to user
	var user = {id:''};
	
	if($.cookie('tracker')){
		user.tracker = $.cookie('tracker');
	}else{
		user.tracker='';
		for(var i = 0; i < 70; i++){user.tracker += "0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ".substr( Math.floor(Math.random() * 62), 1 );}
		$.cookie('tracker', user.tracker);
	}
		
	if ($.cookie('login')){
		user.login = $.cookie('login');
		user.id = user.login;
	}
  
  //Add links to clear the search and to email it
  $('#clearResults').click(function(){closeSearch(); return false;});
  $('#clearResults').after('| <a id="resultLink" href="mailto:%20&subject=Sucessforce Search Results for '+ escape(searchForm.input.value) +'&body=' + escape(window.location.href.split('?')[0] + '?q=' + searchForm.input.value) + '">Email This Page</a>');
  
  //Add links to refine the search
  $('#results-container p.google-credits').before('<p class="refine" id="refine_results"><strong>More Results From: </strong><a href="#" onclick="searchExec(\'recommended\')" class="recommended">Recommended</a> | <a href="#" onclick="searchExec(\'guides\')" class="guides">Guides</a> | <a href="#" onclick="searchExec(\'blogs\')" class="blogs">Blogs</a> | <a href="#" onclick="searchExec(\'community\')" class="community">Community</a> | <a href="#" onclick="searchExec(\'ideas\')" class="ideas">Idea Exchange</a> | <a href="#" onclick="searchExec(\'appexchange_apps\')" class="appexchange_apps">AppExchange Apps</a> | <a href="#" onclick="searchExec(\'non-salesforce\')" class="non-salesforce">Customer & Partner Blogs</a></p>');
  
  
  //check to see if this url is a request for a search result
  var searchQ = getQueryVariable('q');
  if (searchQ != null){
    searchForm.input.value = unescape(searchQ);
    search.execute(searchForm.input.value);
  }
  
  //remove the menu when the user clicks anywhere else
  $('body').bind('click', function(){$('#autocomplete:visible').fadeOut('slow');});
  
	
	
	//add overrides & tracking scripts
	$.each([
		dir+'local.js',
		"http://www.google-analytics.com/urchin.js"		
	],
		function(){
			var s = $(document.createElement('script'));
			s.attr('type', 'text/javascript');
			s.attr('src', this);
			$('head').append(s);
	});
	startTracker();
	if ($.debug.isOn()){$.get('/atom.xml', function(d){$.debug.print(d)});}
	
}

startTracker = function(u){
  switch (window.location.hostname){
  case 'blogs.salesforce.com':
	  if(document.title.indexOf('Salesforce Blogs')>-1){
		_uacct = "UA-354449-5";
	  }else{
		_uacct = "UA-354449-7";
	  }
  break;
  case 'success.salesforce.com':
	_uacct = "UA-354449-8";
  break;
  case 'ideas.salesforce.com':
	_uacct = "UA-354449-6";
  break;
  case 'community.salesforce.com':
	_uacct = "UA-354449-3";
  break;
  default: _uacct = "UA-354449-5";
  }
	var dummy = typeof(urchinTracker) != 'undefined' ? urchinTracker() : window.setTimeout(startTracker, 100);
}


getQueryVariable = function(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] == variable) {
      return pair[1];
    }
  } 
  return null;
}


autocomplete = function(e){
var ovrs = ["features", "dreamforce06", "training", "processes", "rollout_guide"];
	for (i in ovrs){
		if (!(document.getElementById('script_'+ovrs[i]))){
			var s = $(document.createElement('script'));
			s.attr('type', 'text/javascript');
			s.attr('src', 'http://blogs.salesforce.com/'+ovrs[i]+'/local.js');
			s.attr('id', 'script_'+ovrs[i]);
			$('head').append(s);
		}
	}
	switch(e.keyCode){
	case 40: //down arrow
			if ($('#autocomplete a.notification').length < 1 && $('#autocomplete').html() != ''){$($('#autocomplete a')[0]).addClass('notification')}
		$('#autocomplete a.notification').removeClass('notification').next('a').addClass('notification');
	  return false;
	break;
	case 38: //up arrow
		$('#autocomplete a.notification').removeClass('notification').prev('a').addClass('notification');
	  return false;
	break;
	case 13: //enter
		if ($('#autocomplete a.notification').length >0 ){
			document.location = $('#autocomplete a.notification').href();
		}
	break;
	default:
			$('#autocomplete').remove();	 
	break;
	}
  
  
  if (searchForm.input.value.length > 1){
	$('#searchform').append('<div id="autocomplete"></div>'); 
  	
  	var sgstCode = [];
    var sgst = getOverride(searchForm.input.value);
    $(sgst).each(function(i){
    	sgstCode[i] = $(document.createElement('a'));
    	sgstCode[i].attr('href', this.uri);
      sgstCode[i].html(this.title);
      sgstCode[i].attr('title', this.description);
	    $('#autocomplete').append(sgstCode[i]);
    });
  }
}


getOverride = function(q){
var features = [];
if (typeof(ovr)=="undefined"){
	ovr = [];
  for (o in overrides){
  	$.extend(ovr, overrides[o]);
  }
}
for (u in ovr){
  for (k in ovr[u].keywords){
  	if (ovr[u].keywords[k].replace(/'/gi, '').toLowerCase().indexOf(q.replace(/'/gi, '').toLowerCase())> -1){
    	ovr[u].uri = u;
    	features[features.length] = ovr[u];
		}
    break;
	}
}
return features;
}



searchExec = function(){
	s = searchForm.input.value;
	if (typeof(arguments[0]) != 'object') {search.refine = arguments[0]} else {search.refine =  'recommended'}
	s = s + ' more:' + search.refine;
  search.execute(s);
	$('.refine a').removeClass('selected');
	eval('$(".refine a.'+search.refine+'")').addClass('selected');
	if (arguments[0]) { $('#results').slideDown('slow'); }
    return false;
}




searchDisplay = function(){
	if (! search.results) return;
  $('div.result').remove();
  $(search.results).each(function(){
  	$('#results').append('<div class="result"><h2><a href="'+unescape(this.url)+'">'+this.title+'</a></h2><p>'+this.content+'</p><span class="visibleURI">'+this.visibleUrl+'</span></div>');
  });
  $('#columns-container:visible').slideUp('slow');
  $('#results-container:hidden').slideDown('slow');
  $('#resultLink').attr('href', 'mailto:%20&subject=Sucessforce Search Results for '+ escape(searchForm.input.value) +'&body=' + escape(window.location.href.split('?')[0] + '?q=' + searchForm.input.value));
}


closeSearch = function(){
$('#results-container').slideUp('slow');$('#columns-container').slideDown('slow');  search.clearResults(); 
}


// jQuery extensions

jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toGMTString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toGMTString(); // use expires attribute, max-age is not supported by IE
        }
        var path = options.path ? '; path=' + options.path : '';
        var domain = options.domain ? '; domain=' + options.domain : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};

jQuery.debug = {
	
	isOn : function(){
		if (document.location.href.indexOf('#DEBUG#')>-1){			
			return true;
		}else{ return false;}
	},
	
	print : function(str){
		if (typeof console != 'undefined'){ //browser has a debugging console
			console.log(str);
		}else{
			alert(str);
		}
	}
}
