dojo.require('dijit.Dialog');

var CooperationsClass = function() {
	this.defaultDescription = dojo.attr('descriptionBox','innerHTML');
};

CooperationsClass.prototype.init = function() {
	this.initDialog(dojo.body());
	this.initMenu();
	this.initNewsletter();
	this.initFooter();
	dojo.connect(dojo.global,'onresize',this.windowResize);
	dojo.connect(dojo.global,'onscroll', this.windowScroll);
	this.windowResize();
	this.preloadImages();
}

CooperationsClass.prototype.parseContentLinks = function(nodeList) {
	var instance = this;
	var hostname = window.location.hostname.replace('www.','').toLowerCase();
	dojo.forEach(nodeList, function(node) {
		dojo.forEach(dojo.query('a',node), function(a) {
			var href = dojo.attr(a,'href');
			if (href) {
				var anchorPos = href.indexOf('#'); 
				if (anchorPos == -1) {
					href = href.toLowerCase();
					if ((href.substr(0,7) == 'http://' && href.indexOf(hostname) === -1) || href.match(/\.[a-z]{3,4}$/i)) {
						dojo.attr(a, {
							target: '_blank'
						});
					} else {
						dojo.connect(a,'onclick',function(e) {
							dojo.stopEvent(e);
							instance.openDialog(this.href);
						});
					}
				} else {
					dojo.connect(a,'onclick',function(e) {
						if (!dojo.isOpera) {
							var anchors = dojo.query('a[name="'+href.substr(anchorPos+1)+'"] + *');
							if (anchors.length > 0) {
								dojo.stopEvent(e);
								dijit.scrollIntoView(anchors[0]);
							}
						}
					});
				}
			}
		});
	});
}

CooperationsClass.prototype.openDialog = function(href) {
	var instance = this;
	dojo.xhrPost({
		url: href,
		load: function(data) {
			instance.initDialog(data);
		}
	});
}

CooperationsClass.prototype.initDialog = function(el, x, y, dialog) {
	var instance = this;
	if (dojo.isString(el)) {
		var tmp = el;
		el = dojo.create('div', {
			innerHTML: tmp
		});
	}
	var dialogcontent = dojo.query('.dialog', el);
	if (dialogcontent.length > 0) {
		var className = dojo.attr(dialogcontent[0],'class');
		if (!dojo.isObject(dialog)) {
			var dialog = new dijit.Dialog({
				title: '<h1>' + dojo.query('.title', dialogcontent[0])[0].innerHTML.split(' - ')[1] + '</h1>' + dojo.query('.menu', dialogcontent[0])[0].innerHTML
			});
			dojo.place(dialog.domNode,dojo.byId('container'));
			dialog.show();
		} else {
			dialog.attr('title', '<h1>' + dojo.query('.title', dialogcontent[0])[0].innerHTML.split(' - ')[1] + '</h1>' + dojo.query('.menu', dialogcontent[0])[0].innerHTML);
		}
		dojo.empty(dialog.containerNode);
		var contentNode = dojo.query('.content', dialogcontent[0])[0];
		var nodes = dojo.query('>', contentNode);
		instance.parseContentLinks(nodes);
		Agenda.init(nodes);
		dojo.forEach(nodes, function(node) {
			dialog.containerNode.appendChild(node);
		});
		
		//add class for dialog color
		dojo.addClass(dialog.domNode,className);
		
		//set page title
		document.title = dojo.query('.title', dialogcontent[0])[0].innerHTML;
		dojo.destroy(dialogcontent[0]);
		
		//destroy dialog on close
		dojo.connect(dialog,'hide',function() {
			this.destroy();
		});
		
		//add onmousedown event to set focus on window
		dojo.forEach(dojo.query('*',dialog.domNode), function(node){
			dojo.connect(node,'onmousedown',function() {
				instance.focusDialog(dialog.domNode);
			});
		});
		instance.focusDialog(dialog.domNode);
		
		//init dialog menus
		instance.initDialogMenu(dialog);
		
		var xicon = dojo.query('.dijitDialogCloseIcon',dialog.domNode)[0];
		var dialogcoords = dojo.coords(dialog.domNode);

		dojo.style(xicon, {
			marginLeft: (dialogcoords.w - 38)+'px'
		});
		
		var bodycoords = dojo.coords(dojo.body());
		var offset = 10;
		var rand = Math.round(Math.floor(Math.random()*21)); //between 10 and 30 pixels
		var position = {};
		if (typeof x != 'undefined') {
			x -= Math.round(dialogcoords.w/2);
			if (x > bodycoords.w - dialogcoords.w - offset) x = bodycoords.w-dialogcoords.w-offset-rand;
			if (x < offset) x = offset+rand;
			position.left = x+'px';
		}
		if (typeof y != 'undefined') {
			y -= Math.round(dialogcoords.h/2);
			if (y > bodycoords.h - dialogcoords.h - offset) y = bodycoords.h-dialogcoords.h-offset-rand;
			if (y < offset) y = offset+rand;
			position.top = y+'px';
		}
		dialog.attr('style',position);
		
		//remove title tag
		dojo.query('.dijitDialogTitleBar',dialog.domNode)[0].removeAttribute('title');
		
		//check if menu available
		var titleBar = dojo.query('.dijitDialogTitleBar',dialog.domNode)[0];
		if (dojo.query('li',titleBar).length == 0) 
			dojo.addClass(titleBar,'noMenu');
		
		//re-enable inputs under dialog (disable modal dialog feature)
		dojo.forEach(dialog._modalconnects,dojo.disconnect);
		
		return dialog;
	}
}

CooperationsClass.prototype.validEmail = function(email) {
	return email.match(/^[A-Z0-9\._\%+-]+\@[A-Z0-9\.-]+\.[A-Z]{2,4}$/i);
}

CooperationsClass.prototype.initDialogMenu = function(dialog) {
	var instance = this;
	var loading = '<img class="loading" src="/app/views/layouts/cooperations/loading.gif">';
	dojo.forEach(dojo.query('.dijitDialogTitle a',dialog.domNode), function(el) {
		dojo.connect(el,'click',function(e) {
			dojo.stopEvent(e);
			dialog.attr('content', loading);
			dojo.xhrPost({
				url: this.href,
				load: function(data) {
					var dialogcoords = dojo.coords(dialog.domNode);
					var x = dialogcoords.x + Math.round(dialogcoords.w/2);
					var y = dialogcoords.y + Math.round(dialogcoords.h/2);
					instance.initDialog(data, x, y, dialog);
				}
			});
		});
	});
}

CooperationsClass.prototype.focusDialog = function(dialog) {
	if (dojo.style(dialog,'zIndex') != 999){
		dojo.forEach(dojo.query('.dijitDialog'), function(el) {
			dojo.style(el, {
				zIndex: 998
			});
		});
		dojo.style(dialog, {
			zIndex: 999
		});
	}
}

CooperationsClass.prototype.initMenu = function() {
	var instance = this;
	dojo.forEach(dojo.query('a',dojo.byId('mainMenu')), function(item) {
		dojo.connect(item,'click',function(e) {
			dojo.stopEvent(e);
			this.blur();
			var hostname = window.location.hostname.replace('www.','').toLowerCase();
			if (item.href.substring(0,7) == 'http://' && item.href.indexOf(hostname) === -1) {
				window.open(item.href,'_blank');
			} else {
				var loading = dojo.query('img.loading',this)[0];
				dojo.style(loading, {
					display: 'block'
				});
				x = e.pageX;
				y = e.pageY;
				dojo.xhrPost({
					url: item.href,
					load: function(data) {
						instance.initDialog(data, x, y);
						dojo.style(loading, {
							display: 'none'
						});
					}
				});
			}
		});
		var label = dojo.query('span.label',item);
		var image = dojo.query('img.image',item);
		if (image.length == 1) {
			if (label.length == 1) {
				dojo.style(label[0], {
					display: 'none'
				});
			}
			dojo.style(image[0], {
				display: 'block'
			});
			var hover = dojo.query('img.hover',item);
			if (hover.length == 1) {
				dojo.connect(item,'onmouseover',function() {
					dojo.style(image[0], {
						display: 'none'
					});
					dojo.style(hover[0], {
						display: 'block'
					});
				});
				dojo.connect(item,'onmouseout',function() {
					dojo.style(image[0], {
						display: 'block'
					});
					dojo.style(hover[0], {
						display: 'none'
					});
				});
			}
		}
		
		dojo.connect(item,'onmouseover',function() {
			var description = dojo.query('.description',this);
			if (description.length > 0) {
				dojo.byId('descriptionBox').innerHTML = description[0].innerHTML;
			}
		});
		dojo.connect(item,'onmouseout',function() {
			dojo.byId('descriptionBox').innerHTML = instance.defaultDescription;
		});
	});
}

CooperationsClass.prototype.preloadImages = function() {
	var images = dojo.query('img',dojo.byId('mainMenu'));
    preloadImage = new Array(); 
    for(var i=0; i<images.length; i++) {
		preloadImage[i] = new Image();
        preloadImage[i].src = images[i].src;
    }
}

CooperationsClass.prototype.windowResize = function() {
	var size = dojo.coords(dojo.body());	
	/*dojo.style(dojo.body(), {
		maxHeight: (size.h < 650? 650 : size.h)+'px',
		maxWidth: (size.w < 1000? 1000 : size.w)+'px',
		height: (size.h < 650? 650 : size.h)+'px',
		width: (size.w < 1000? 1000 : size.w)+'px'
	});*/
	if (size.w < 1000 || size.h < 650) {
		dojo.addClass(dojo.body(),'small');
	} else {
		dojo.removeClass(dojo.body(),'small');
	}
}

CooperationsClass.prototype.initNewsletter = function() {
	var instance = this;
	var newsletter = dojo.byId('newsletter');
	var form = dojo.query('form.newsletter',newsletter)[0];
	var formClone = form.cloneNode(true);
	dojo.query('ul',formClone)[0].style.display = 'block';
	
	dojo.connect(form,'onsubmit',function(e) {	
		dojo.stopEvent(e);
		var content = dojo.query('.lists',newsletter);
		var dialog = document.createElement('div');
		dojo.addClass(dialog,'dialog gray');
		dialog.innerHTML = content[0].innerHTML;
		content = document.createElement('div');
		content.appendChild(dialog);
		var dialog = instance.initDialog(content);
		var formClone2 = formClone.cloneNode(true);
		dojo.query('.dijitDialogPaneContent',dialog.domNode)[0].appendChild(formClone2);
		formClone2.email.value = form.email.value;
		dojo.connect(formClone2,'onsubmit',formClone2,function(e) {
			dojo.stopEvent(e);
		});
		dojo.connect(formClone2.email,'onkeyup',formClone2.email,function() {
			dojo.removeClass(this,'invalid');
		});
		dojo.forEach(dojo.query('input[type=submit]',formClone2), function(input) {			
			dojo.connect(input,'onclick',input, function(e) {
				dojo.stopEvent(e);
				if (!instance.validEmail(formClone2.email.value)) {
					dojo.addClass(formClone2.email,'invalid');
					formClone2.email.focus();
					return;
				}
				var load = function(data) {
					var tmp = data;
					data = document.createElement('div');
					data.innerHTML = tmp;
					dojo.forEach(dojo.query('.newsletter .message',data), function(node) {
						dojo.place(node, formClone2, 'first');
						var fadeOut = dojo.fadeOut({
							node: node,
							duration: 2000
						});
						fadeOut.onEnd = function() {
							dojo.destroy(node);
						}
						fadeOut.play();
					});
				}
				switch(this.title) {
					case 'subscribe':
						dojo.xhrPost({
							url: formClone2.action,
							form: formClone2,
							load: load
						});
						break;
						
					case 'unsubscribe':
						dojo.xhrPost({
							url: formClone2.action.replace('newsletter-subscribe','newsletter-unsubscribe'),
							form: formClone2,
							load: load
						});
						break;
						
					default:
						break;
				}
				formClone2.reset();
				formClone2.email.focus();
			});
		});
	});
}

CooperationsClass.prototype.initFooter = function() {
	/*dojo.forEach(dojo.query('a',dojo.byId('footer')), function(a) {
		dojo.connect(a,'onclick', function() {
			alert('click');
			return false;
		});
	});*/
	this.parseContentLinks([dojo.byId('footer')]);
}

CooperationsClass.prototype.windowScroll = function(e) {
	//brute force
	dijit.scrollIntoView(dojo.byId('container'));
}
