AdwordsTracker = function() {
	this.project = '1234' ;

	this.page_data = { } ;

	this.path_to_script = '' ;

	this.cookieEnabled = (navigator.cookieEnabled && navigator.cookieEnabled == true) ? 1 : 0 ;

	this.init = function() {
		var sc = document.getElementsByTagName('script') ;
		for (var i = 0; i < sc.length; i++) {
			if (sc[i].src.indexOf('adwordsTracker.js') == -1) {
				continue ;
			}
			var path = sc[i].src ;
			this.path_to_script = path.substring(0, path.lastIndexOf('/')+1) ;
		}

		this.page_data.referer = document.referrer ;
		//this.page_data.referer = 'http://www.google.de/search?client=opera&rls=de&q=%22dies+ist+ein+test%22+einzelne+w%C3%B6rter&sourceid=opera&ie=utf-8&oe=utf-8' ;
		this.page_data.url = window.location.href ;
		this.page_data.browser = navigator.userAgent ;

		this.logVisit() ;
	} ;

	this.send = function(ev) {

		var date = new Date ;
		var send = {project:this.project, type:ev.type, request_data:this.page_data, data:ev.data, time:date.getTime(), cookieEnabled:this.cookieEnabled} ;

		var img = new Image() ;
		img.src = this.path_to_script+'adwordsTrack.php?'+AdwordsTrackerTools.createQueryString(send) ;
		//alert(img.src) ;
	} ;

	this.logVisit = function() {
		this.logEvent('visit') ;
	}

	this.logConversion = function(actionId, form, data) {
		if (!data) {
			data = {} ;
		}

		data.action_id = actionId ;

		if (form) {
			data['form'] = AdwordsTrackerTools.formToObject(form) ;
		}

		this.logEvent('conversion', data) ;
	} ;

	this.logEvent = function(type, data) {
		this.send(new AdwordsTrackerEvent(type, data)) ;
	}

	this.init() ;
}

AdwordsTrackerEvent = function(type, data) {
	this.type = type ? type : 'visit' ;

	this.data = data ? data : { } ;
}

AdwordsTrackerTools = function() {
	return {
		createQueryString: function(data, prefix) {
			var out = '' ;
			for (var k in data) {
				var v = data[k] ;
				var f = prefix ? prefix+'['+k+']' : k ;
				if (typeof v == 'function') {
					continue ;
				}
				if (typeof v == 'object') {
					out += this.createQueryString(v, f) ;
					continue ;
				}
				out += '&'+encodeURIComponent(f)+'='+encodeURIComponent(v) ;
			}

			return out ;
		},

		serializeForm: function(form) {
			return this.createQueryString(this.formToObject(form)) ;
		},

		formToObject: function(form) {
			if (typeof form != 'object' || !form.elements || !form.tagName || form.tagName.toLowerCase() != 'form') {
				return {} ;
			}

			var out = {} ;
			var elems = form.elements ;
			for (var i = 0; i < elems.length; i++) {
				var value = this.getElementValue(elems[i]) ;
				if (value == null) {
					continue ;
				}
				out[elems[i].name] = value ;
			}

			return out ;
		},

		getElementValue: function(elem, asText) {
			if (!elem.name) {
				return null ;
			}

			switch (elem.type.toLowerCase()) {
				case 'checkbox' :
				case 'radio' :
					if (!elem.checked) {
						return null ;
					}
				break ;

				case 'select' :
				case 'selectOne' :
				case 'select-one' :
					return elem.options[elem.options.selectedIndex].value ;

				case 'selectMultiple' :
				case 'select-multiple' :
					var out = {} ;
					var opts = elem.options ;
					var cnt = 0 ;
					for (var i = 0 ; i < opts.length; i++) {
						if (!opts[i].selected) {
							continue ;
						}
						out[cnt] = opts[i].value ;
						cnt++ ;
					}
					return asText ? this.createQueryString(out, elem.name) : out ;
			}

			return elem.value ;
		},

		end: ''
	}
}() ;

var awt = new AdwordsTracker ;
