/**
 * All rights reserved
 * 
 * @uthor: Jakub Kozicki kuba.kozicki@gmail.com
 * @version 0.6
 */

Event.observe(window, 'load', function() {
	CMS.resizeImageContainers("round-image2");
	new CMS.media('sponsors');
	new CMS.media('partners');
});

CMS = Class.create();

/**
 * Open new window
 */
CMS.open = function(event) {
	event = Event.extend(event);
	element = event.findElement();
	element = element.nodeName.toLowerCase() != "a" ? element.up("a") : element;
	window.open(element.getAttribute("href"));
	event.stop();
}

/**
 * Set location
 */
CMS.setLocation = function(sUrl){
    window.location.href = sUrl;
}

/**
 * Add to favourites
 */
CMS.addToFavourites = function(sName, sUrl) {
	if(window.sidebar)
		window.sidebar.addPanel(sName, sUrl , "");
	else if(window.external)
		window.external.AddFavorite(sUrl, sName)
}

/**
 * Send e-mail
 */
CMS.mail = function(sUser, sSite, bUrl, bShowMail, sClassName) {
	if(typeof sClassName == "undefined")
		sClassName == "";
	
	document.write(bUrl ? '<a class="' + sClassName + '" href=\"mailto:' + sUser + '@' + sSite + '\">' : '');
	document.write((bShowMail ? sUser + '@' + sSite : '') + (bUrl ? '</a>' : ''));
}


/**
 * Show pop up
 */
CMS.openPopup = function(sUrl){
	var sWidth = window.screen.width;
	var sHeight = window.screen.height;
	var oWindow = window.open(sUrl, "popupWindow", "height=450, width=620, left="+parseInt((sWidth-700)/2)+", top="+parseInt((sHeight-400)/2)+", scrollbars, resizable");
	oWindow.focus();
}

/**
 * Search form
 */
CMS.SearchForm = Class.create();
CMS.SearchForm.prototype = {
    initialize: function(form, field, fieldSubmit, emptyText){
        this.form = $(form);
        this.buttonSubmit = $(fieldSubmit);
        this.field = $(field);
        this.emptyText = emptyText;
        
        Event.observe(this.form, 'submit', this.submit.bind(this));
        Event.observe(this.buttonSubmit, 'click', this.click.bind(this));
        Event.observe(this.field, 'focus', this.focus.bind(this));
        Event.observe(this.field, 'blur', this.blur.bind(this));
        this.blur();
    },
    
    submit: function(event){
        if (this.field.value == this.emptyText || this.field.value == '') {
            Event.stop(event);
            return false;
        }
        return true;
    },
    
    click: function(event){
        if (this.submit(event) && !this.form.action.blank()) 
            this.form.submit();
    },
    
    focus: function(event){
        if (this.field.value == this.emptyText) {
            this.field.value = '';
        }
        
    },
    
    blur: function(event){
        if (this.field.value == '') {
            this.field.value = this.emptyText;
        }
    }
}

/**
 * Decorate anchors
 */
CMS.DecorateAnchors = Class.create({

	initialize: function(content){
        
		var anchors = $(content).select("a");
		anchors.each(function(anchor) {
			
			if(/^.*\.(doc|docx)$/.test(anchor.getAttribute("href")) == true) {
				anchor.addClassName("anchor_word");
			}
			
			if(/^.*\.(xls|xlsx)$/.test(anchor.getAttribute("href")) == true) {
				anchor.addClassName("anchor_excel");
			}
			
			if(/^.*\.(ppt|pptx)$/.test(anchor.getAttribute("href")) == true) {
				anchor.addClassName("anchor_powerpoint");
			}
			
			if(/^.*\.pdf$/.test(anchor.getAttribute("href")) == true) {
				anchor.addClassName("anchor_pdf");
			}
		});
    }
});

/**
 * Print
 */
CMS.print = function(iTimeout){
	if(window.print) {
		setTimeout(function() {
			window.print();
		}, iTimeout);
	}
}

/**
 * Resize image containers
 */
CMS.resizeImageContainers = function(className) {
	
	var documentBody = Element.extend(document.getElementsByTagName("body")[0]);
	var divs  = documentBody.select("." + className);
	
	divs.each(function(div) {
		var img = div.select("img").first();
		div.setStyle({'width': img.getWidth() + 'px'});
	});
}


/**
 * Media
 */
CMS.media = Class.create({
	initialize: function(id){
		this.intervalTime = 20;
		
		this.media = $(id);
		this.transparentClass = "transparent";
		
		if(this.media != null) {
			
			this.list = this.media.select('ul').first();
			this.elements = this.media.select('li');
			
			this.widthElements = new Array();
			this.heightElements = new Array();
			for(i = 0; i < this.elements.size(); i++) {
				this.widthElements.push(this.elements[i].getWidth());
				this.heightElements.push(this.elements[i].getHeight());
			}
			
			var width = 0;
			var marginLeft = 0;
			var marginRight = 0;
			for(i = 0; i < this.elements.size(); i++) {
				this.elements[i].writeAttribute('index', i);
				this.elements[i].absolutize();
				
				marginLeft = parseInt(this.elements[i].getStyle("margin-left"));
				marginRight = parseInt(this.elements[i].getStyle("margin-right"));
				
				this.elements[i].setStyle({'left' : width + 'px', 'width' : this.widthElements[i] + 'px', 'height' : this.heightElements[i] + 'px'});
				width += this.widthElements[i] + marginLeft + marginRight;			
			}
			this.width = width;
			
			Event.observe(this.media, 'mouseover', this.stop.bindAsEventListener(this));
			Event.observe(this.media, 'mouseout', this.start.bindAsEventListener(this));
			
			// Add events
			for(i = 0; i < this.elements.size(); i++) {
				Event.observe(this.elements[i], 'mouseover', this.overElement.bindAsEventListener(this));
				Event.observe(this.elements[i], 'mouseout', this.outElement.bindAsEventListener(this));
			}
			
			this.start();
		}
	},
	overElement: function(event) {
		var element = event.element();
		element.removeClassName(this.transparentClass);
	},
	outElement: function(event) {
		var element = event.element();
		if(element.nodeName.toLowerCase() != "img") {
			element.select("img").first().addClassName(this.transparentClass);
		}
		else {
			element.addClassName(this.transparentClass);
		}
	},
	start: function(event) {
		
		this.intervalId = setInterval(function() {
			var elementsLength = this.elements.size();
			for(index = 0; index < elementsLength; index++) {
				
				var element = this.elements[index];
				var left = parseInt(element.getStyle('left'));
				
				if((left * -1) >= element.getWidth()) {
					element.setStyle({'left' : (this.width - element.getWidth()) + "px"});
				} else {
					element.setStyle({'left': (left - 1) + "px" });
				}
			}
			
		}.bind(this), this.intervalTime);
	},
	stop: function(event) {
		
		var element = event.element();
		element.removeClassName(this.transparentClass);
		
		clearInterval(this.intervalId);
	}
});


/**
 * Intro
 */
CMS.intro = Class.create({
	initialize: function(css, items){
		
		this.css = css;
		this.activeItem = items.first();
		this.items = items;
		this.itemIndex = 0;
		
		this.intervalId = setInterval(function() {
			this.play();
		}.bind(this), 8000);
		
		$(this.css.list).select('[id="prezenterMini1"]', '[id="prezenterMini2"]', '[id="prezenterMini3"]', '[id="prezenterMini4"]', '[id="prezenterMini5"]').each(function(item) {
			var id = item.getAttribute("id");
			var number = id.substring(13, id.length);
			
			Event.observe(item, 'click', function(event) {
				this.goTo(number);
				clearInterval(this.intervalId);
			}.bind(this));
		}.bind(this));
		
		// Preload images
		this.items.each(function(item) {
			var image = new Image(100, 100);
			image.src = item.img;
		});
	},
	
	goTo: function(number){
		if (this.itemIndex != (number - 1)) {
			this.itemIndex = (number - 1);
			this.reloadItem();
		}
    },
	
	goNext:  function(){
        if ((this.itemIndex + 1) < this.items.size()) {
			this.itemIndex++;
			this.reloadItem();
		} else {
			this.itemIndex = 0;
		}
    },
    
    play: function() {
    	this.goNext();
    	this.reloadItem();
    },
    
    getActiveItem: function() {
		return this.items[this.itemIndex];
	},
    
    reloadItem: function() {
		var item = this.getActiveItem();
		
		this.setActiveDiv();
		
		var elements = [this.css.itemName, this.css.itemInfoBg, this.css.itemDescribe, this.css.itemPhoto];
		
		elements.each(function(element) {
			new Effect.Opacity($(element), {
				duration: 0.5,
				from: 1.0,
				to: 0
			});
		});
		
		setTimeout(function() {
			$(this.css.itemName).innerHTML = item.get("name");
			$(this.css.itemDescribe).innerHTML = item.get("describe");
			$(this.css.itemPhoto).setAttribute("src", item.get("img"));
			$(this.css.itemName).setAttribute("href", item.get("url"));
			$(this.css.itemDescribe).setAttribute("href", item.get("url"));
		
		}.bind(this), 550);
		
		setTimeout(function() {
			
			var elements = [this.css.itemPhoto];
			elements.each(function(element){
				new Effect.Opacity($(element), {
					duration: 0.5,
					from: 0,
					to: 1.0
				});
			}.bind(this))
		}.bind(this), 950);

	
		setTimeout(function() {
			
			var elements = [this.css.itemInfoBg, this.css.itemName, this.css.itemDescribe];
			elements.each(function(element){
				new Effect.Opacity($(element), {
					duration: 0.5,
					from: 0,
					to: 1.0
				});
			}.bind(this))
		}.bind(this), 1400);
	},
	
	setActiveDiv: function(){
        
		$(this.css.list).select('[id="prezenterMini1"]', '[id="prezenterMini2"]', '[id="prezenterMini3"]', '[id="prezenterMini4"]', '[id="prezenterMini5"]').each(function(item) {
			
			var id = item.getAttribute("id");
			var number = id.substring(13, id.length);
			
			if(number == (this.itemIndex + 1))
				item.addClassName("active");
			else
				item.removeClassName("active");
		}.bind(this));
    }

});
