/* requires jQuery, jQuery UI, jQuery Cookie, SWFObject and Google Analytics */
var knxa_tracking_location = '/App_Themes/Kenexa/flash/';
var knxa_tracking_id = 'knxa_tracking';

var knxa_cookie_name = 'knxa';
var knxa_cookie_options = { path: '/', expires: 30 };
var knxa_swfobject = { flashvars: { }, params: { wmode: 'transparent', menu: 'false', allowScriptAccess: 'sameDomain' }, attributes: { id: knxa_tracking_id, name: knxa_tracking_id } };

var knxa_tracking_filepath = null;
var knxa_tracking_movie = null;

var _knxa_tracking_vars = ['fullname', 'email', 'company', 'phone'];

$(document).ready(function() {
    $('body').append('<div style="position: absolute; top: 0; left: 0;"><div id="flash_' + knxa_tracking_id + '"></div></div>');
    swfobject.embedSWF(knxa_tracking_location + 'tracking.swf', 'flash_' + knxa_tracking_id, '1', '1', '9.0.0', '', knxa_swfobject.flashvars, knxa_swfobject.params, knxa_swfobject.attributes);
    knxa_tracking_movie = document.getElementById(knxa_tracking_id);

    $('a.knxa-download').click(function() {
      _track_google_analytics('/downloads', _get_download_filepath($(this).attr('href')));
      return true;
    });

    $('a.knxa-remote-download').click(function() {
      _track_google_analytics('/downloads', _get_download_remote($(this).attr('href')));
      return true;
    });

    $('a.knxa-feed').click(function() {
      _track_google_analytics('/feeds', _get_download_filepath($(this).attr('href')));
      return true;
    });

    $('a.knxa-remote-feed').click(function() {
      _track_google_analytics('/feeds', _get_download_remote($(this).attr('href')));
      return true;
    });

    $('a.knxa-user-download').click(function() {
      knxa_tracking_filepath = _get_download_filepath($(this).attr('href'));
      if(knxa_tracking_is_known()) {
	knxa_tracking_save('download');
	_track_google_analytics('/downloads', knxa_tracking_filepath);
	knxa_tracking_filepath = null;
	return true;
      }
      $('#knxa-login-dialog').dialog('open');
      return false;
    });

    $('#knxa-login-dialog').dialog({
	autoOpen: false,
        bgiframe: true,
	closeOnEscape: true,
	width: 350,
	height: 250,
	modal: true,
	resizable: false,
	buttons: {
	  'Continue with download': function() {
	      knxa_tracking_set('fullname', $('#knxa-login-dialog #fullname').val());
	      knxa_tracking_set('email', $('#knxa-login-dialog #email').val());
	      knxa_tracking_set('company', $('#knxa-login-dialog #company').val());
	      knxa_tracking_set('phone', $('#knxa-login-dialog #phone').val());

	      if(knxa_tracking_filepath != null) {
		  knxa_tracking_save('all');
	      } else {
	          knxa_tracking_save('user');
	      }
	  },
	  Cancel: function() {
	    $(this).dialog('close');
	  }
	},
	close: function() { }
    });
});

function knxa_tracking_get(name) {
  if(_in_array(name, _knxa_tracking_vars)) {
    var element = knxa_tracking_movie;
    var call_result = _isset(element) ? element.getVar(name) : null;
    if(!_isset(call_result)) {
      call_result = $.cookie(knxa_cookie_name + '-' + name);
    }
    return call_result;
  }
  return null;
}

function knxa_tracking_set(name, value) {
  if(_isset(value) && (value != '') && _in_array(name, _knxa_tracking_vars)) {
    var element = knxa_tracking_movie;
    if(_isset(element)) {
      element.setVar(name, value);
    }
    $.cookie(knxa_cookie_name + '-' + name, value, knxa_cookie_options);
  }
}

function knxa_tracking_reset() {
  var element = knxa_tracking_movie;
  if(_isset(element)) {
    element.reset();
  }
  for(var i = 0; i < _knxa_tracking_vars.length; i++) {
    $.cookie(knxa_cookie_name + '-' + _knxa_tracking_vars[i], null, knxa_cookie_options);
  }
}

function knxa_tracking_save(mode) {
    if(!_in_array(mode, ['all', 'download', 'user'])) {
	mode = 'all';
    }

    var tracking_data = {
	mode: mode,
	fullname: knxa_tracking_get('fullname'),
	email: knxa_tracking_get('email'),
	company: knxa_tracking_get('company'),
	phone: knxa_tracking_get('phone'),
	filename: knxa_tracking_filepath,
	ga_ident: knxa_tracking_filepath
    };

    $.ajax({
      beforeSend: function(XMLHttpRequest) { 
        $('#knxa-login-dialog .knxa-dialog-errors').html('');
      },	    
      cache: false,
      complete: function(XMLHttpRequest, textStatus) { },
      data: tracking_data,
      dataType: 'json', 
      error: function(XMLHttpRequest, textStatus, errorThrown) { 
	//alert('error ' + textStatus + ' ' + errorThrown);
	if(knxa_tracking_filepath != null) {
	  if($('#knxa-login-dialog').dialog('isOpen')) {
	    $('#knxa-login-dialog').dialog('close');
	  }
	  _track_google_analytics('/downloads', knxa_tracking_filepath);
	  var tmp = knxa_tracking_filepath;
	  knxa_tracking_filepath = null;
	  window.location = tmp;
	}
      },		
      success: function(data, textStatus) { 
	//alert('success ' + data + ' ' + textStatus);
	if(knxa_tracking_filepath != null) {
	  if(data.status == 'success') {
	    if($('#knxa-login-dialog').dialog('isOpen')) {
	      $('#knxa-login-dialog').dialog('close');
	    }
	    _track_google_analytics('/downloads', knxa_tracking_filepath);
	    var tmp = knxa_tracking_filepath;
	    knxa_tracking_filepath = null;
	    window.location = tmp;
          } else {
	    if($('#knxa-login-dialog').dialog('isOpen')) {
  	      for(var i = 0; i < data.errors.length; i++) {
	        if(data.errors[i] != '') {
		  $('#knxa-login-dialog .knxa-dialog-errors').append('<div class="ui-state-error">' + data.errors[i] + '</div>');
	        }
              }
	    }
	  }
        }
      },		
      type: 'POST',
      url: 'tracking.asp'		
    });
}

function knxa_tracking_is_known() {
    var name = knxa_tracking_get('fullname');
    var email = knxa_tracking_get('email');
    return _isset(name) && _isset(email);
}

function _close_dialog_if_open() {

}

function _track_google_analytics(prefix, ga) {
    if(ga.substring(0, 1) != '/') {
	ga = '/' + ga;
    }
    pageTracker._trackPageview(prefix + ga);
    // alert(prefix + ga);
}

function _get_movie(movieName) {
    return (navigator.appName.indexOf("Microsoft") != -1) ? window[movieName] : document[movieName];
}

function _get_download_filepath(url) {
    if((url.substring(0, 7) == 'http://') || (url.substring(0, 8) == 'https://')) {
	url = url.substring(url.indexOf('/', 8));
    }
    return url;
}

function _get_download_remote(url) {
    if(url.substring(0, 7) == 'http://') {
	return '/remote/' + url.replace('http://', '');
    } else if(url.substring(0, 8) == 'https://') {
	return '/remote/' + url.replace('https://', '');
    }
    return '/remote/unknown';
}

function _in_array(needle, haystack) {
    for(var i = 0; i < haystack.length; i++) {
	if(haystack[i] == needle) {
	    return true;
	}
    }
    return false;
}

function _isset(variable) {
  return (typeof variable != 'undefined') && (variable != null);
}
