window.addEvent('domready', function(){
	$$('.ajaxLink').each(function(link){
		link.addEvent('click', function(e){
			e = new Event(e);
			ajaxReq(link.href, link, '', e);
			e.stop();
		})
	})
})

function listLocalizeDealer(url, container){
	req = new Request.HTML({
		url: url,
		onRequest: function(){
			container.addClass('loading');
		},
		onComplete: function(responseTree, responseElements, responseHTML, responseJavaScript){
			container.removeClass('loading');
			alert(responseHTML);
			//container.set('html', txt);
		},
		evalScripts: true
	}).send();
}

function ajaxReq(url, container, data, event){
	if(!data || typeof(data) != 'string'){
		var dataString = '';
	}
	if(typeof(data) == 'object'){
		for (var i in data){
			dataString += i+'='+data[i]+'&';
		}
	}
	
	var resp = new Request({
		url: url,
		onRequest: function(){
			container.addClass('loading');
		},
		onSuccess: function(txt, xml){
			container.removeClass('loading');
			handleMoResponse(xml, event);
		},
		onFailure: function(){
			container.removeClass('loading');
			injectMessage('Connection error', 'error');
		},
		method: 'post',
		data: dataString
	}).send();
}

function xml2json(node, recursionCount){
	var recursionCount = recursionCount+1 || 0;
	var json = {}
	if(recursionCount > 5) return json;
	for(i = 0; i < node.childNodes.length; i++){
		var childNode = node.childNodes[i];
		if(childNode.nodeType == 1){
			var nodeName = childNode.nodeName;
			var nodeValue = null;
			if(childNode.childNodes.length > 0){
				if(childNode.firstChild.nodeType == 3){
					// leave out whitespace-nodes
					if(!/^\s+$/.test(childNode.firstChild.nodeValue)){
						// trim whitespaces
						nodeValue = childNode.firstChild.nodeValue.replace('<![CDATA[', '').replace(']]>', '').replace(/^\s+/, '').replace(/\s+$/, '');
					}
				} else {
					try{
						nodeValue = childNode.firstChild.nodeValue;
					} catch(e){
						nodeValue = xml2json(childNode, recursionCount);
					}
				}
			} else {
				nodeValue = childNode.nodeValue;
			}
			json[nodeName] = nodeValue;
		}
	}
	return json;
}

function handleMoResponse(response, event){
	
	if(typeof response == 'string'){
		if (Browser.Engine.trident){
	        var doc = new ActiveXObject('Microsoft.XMLDOM');
	        doc.async = false;
	        doc.loadXML(response);
		} else {
        	doc = new DOMParser().parseFromString(response, 'text/xml')
		}
		var node = doc;
	} else {
		node = response;
	}
	
	for (m = 0; m < node.childNodes.length; m++) {
		if (node.childNodes[m].nodeType == 1) {
			for (i = 0; i < node.childNodes[m].childNodes.length; i++) {
				if (node.childNodes[m].childNodes[i].nodeType == 1) {
					switch (node.childNodes[m].childNodes[i].nodeName) {
					
						case 'partner':
							var partner = xml2json(node.childNodes[m].childNodes[i]);
							window.fireEvent('partnerAction', [event, partner]);
							break;
					
						case 'messages':
							//alert(node.childNodes[m].childNodes[i].childNodes.length);
							for (j = 0; j < node.childNodes[m].childNodes[i].childNodes.length; j++) {
								if (node.childNodes[m].childNodes[i].childNodes[j].nodeType == 1) {
									html = node.childNodes[m].childNodes[i].childNodes[j].childNodes[0].nodeValue;
									type = node.childNodes[m].childNodes[i].childNodes[j].getAttribute('type');
									markelementid = node.childNodes[m].childNodes[i].childNodes[j].getAttribute('markelementid');
									if (markelementid != '') {
										markupElement(markelementid, type);
									}
									injectMessage(html, type);
								}
							}
							break;
							
						case 'jsactions':
							for (j = 0; j < node.childNodes[m].childNodes[i].childNodes.length; j++) {
								if (node.childNodes[m].childNodes[i].childNodes[j].nodeType == 1) {
									subject = node.childNodes[m].childNodes[i].childNodes[j].childNodes[0].nodeValue;
									type = node.childNodes[m].childNodes[i].childNodes[j].getAttribute('type');
									effect = node.childNodes[m].childNodes[i].childNodes[j].getAttribute('effect');
									switch (type) {
										case 'inject':
											into = node.childNodes[m].childNodes[i].childNodes[j].getAttribute('into');
											injectHTML(subject, into, effect);
										break;
										case 'delete':
											deleteHTML(subject, effect);
										break;
										case 'replace':
											into = node.childNodes[m].childNodes[i].childNodes[j].getAttribute('into');
											replaceHTML(subject, into, effect);
										break;
										case 'fadeOut':
											fadeOut( node.childNodes[m].childNodes[i].childNodes[j].getAttribute('into') );
										break;
										case 'fadeIn':
											fadeIn( node.childNodes[m].childNodes[i].childNodes[j].getAttribute('into') );
										break;
										case 'script':
											eval(subject);
										break;
									}
								}
							}
							break;
					}
				}
			}
		}
	}
}

function spawnCloseButton(){
	var container = $('messagecenter');
	new Element('a', {
					'href': 'javascript:void(0);',
					'class': 'close',
					'id': 'closebutton',
					'events': {
						'click': function(){
							var messageCenter = new Fx.Morph(container, {duration: 200, transition: Fx.Transitions.Sine.easeOut})
							
							messageCenter.start({
								'opacity': 0
							}).chain(function(){
								this.start({
									'height': 0,
									'margin': 0,
									'padding': 0
								})
							}).chain(function(){
								$('messagecenter').destroy();
							});
							$('closebutton').removeEvents();
							$('closebutton').destroy();
						},
						'focus': function(){
							this.blur();
						}
					}
				}).inject($('messagecenter'), 'top');
}

function injectMessage(message, type){
	if($('content')) container = $('content');
	
	// Get Messagecenter div
	if(!container.hasChild('messagecenter')){
		new Element('div', {'id': 'messagecenter'}).inject(container, 'top');
		spawnCloseButton();
	}
	
	// Spawn Type-specific Container if not exists and inject Message
	if(!$('messagecenter').hasChild(type)){
		var typeContainer  = new Element('div', {
			'id': type
		});
		typeContainer.inject($('messagecenter'), 'top');
	}
	
	message = new Element('div', {
			'class': 'message-item',
			'html': message
		});
	message.inject(type, 'top');
	
	new Fx.Morph(message, {duration: 500, transition: Fx.Transitions.Sine.easeIn}).start({'opacity': 1});
}
