/*
Title:      Main JavaScript	
Author:     Cristian Deschamps, cristian.deschamps@rocler.com

*/

// ------[ IE6 Cache Control (remove flicker on mouseover) ]------------------------------------------------- //	
try {
  document.execCommand('BackgroundImageCache', false, true);
} catch(e) {}

// TEMP FUNCTION TO BE DELETED 
function resizeFlash(oldsize, newsize) {
	Placencia.Flash.Resize();
}



// ------[ Master Onload for all page. ]------------------------------------------------- //	
window.Placencia = window.Placencia || {};

Placencia = {	
	Init : function() {									
		BrowserDetect.init();
		document.body.className = document.body.className + " is" + BrowserDetect.browser;
		Placencia.PageHeight.Init();							
		Placencia.Form.Select.Init();
		Placencia.Form.Radio.Init();
		Placencia.Form.Checkbox.Init();
		Placencia.Form.Calendar.Init();
	}
};
YAHOO.util.Event.onDOMReady(Placencia.Init, Placencia, true);


// ------[ Page Height Resize ]------------------------------------------------- //
YAHOO.util.Event.on(window,'resize',function(){
	throttle(Placencia.PageHeight.Init, window);
});
	
function throttle(method, scope) {
	clearTimeout(method._tId);
	method._tId= setTimeout(function(){
		method.call(scope);
	}, 100);
};

Placencia.PageHeight = {
	ContentHeight : false,
	
	Init : function() {
		var viewportHeight = parseInt(YAHOO.util.Dom.getViewportHeight());
	
		if (YAHOO.env.ua.ie) {
			 var el = YAHOO.util.Dom.get('container-header');
			 var headerHeight = el.offsetHeight;			 
			 var el = YAHOO.util.Dom.get('container-footer');
			 var footerHeight = el.offsetHeight;			 
			 var el = YAHOO.util.Dom.get('container-content');
			 var contentHeight = el.offsetHeight;			 			 
			 var el = YAHOO.util.Dom.get('main-content');
			 var mainContentHeight = el.offsetHeight;				 			
			 
		} else {
			var headerHeight = parseInt(YAHOO.util.Dom.getStyle('container-header', 'height'));
			var footerHeight = parseInt(YAHOO.util.Dom.getStyle('container-footer', 'height'));
			var contentHeight = parseInt(YAHOO.util.Dom.getStyle('container-content', 'height'));
			var mainContentHeight = parseInt(YAHOO.util.Dom.getStyle('main-content', 'height'));
		}
		
		h = viewportHeight-headerHeight-footerHeight;		

		if(h > mainContentHeight) {		
			YAHOO.util.Dom.setStyle('container-content', 'height', h+'px');		
		} else {
			YAHOO.util.Dom.setStyle('container-content', 'height', '');		
		}
	
	}
};

// ------[ Flash ]------------------------------------------------- //
Placencia.Flash = {	
	init: false,
	isOpen: false,
	isHome: false,
	toHeight: 590,
	fromHeight : 230,
	
	
	Resize : function(e) {
		window.scrollTo(0,0);								
		
		if(!Placencia.Flash.init) {
			var header = YAHOO.util.Dom.get('flash-placeholder');
			var headerHeight = header.offsetHeight;				
			Placencia.Flash.fromHeight = headerHeight;
			Placencia.Flash.init = true;
		}
				
		if(!Placencia.Flash.isOpen) {			
			var attributes = { 
				height: { to: Placencia.Flash.toHeight } 
			};	
			Placencia.Flash.isOpen = true;
			
		} else {
			var attributes = { 
				height: { to: Placencia.Flash.fromHeight } 
			};		
			Placencia.Flash.isOpen = false;
			
		}

	    var anim = new YAHOO.util.Anim('flash-placeholder', attributes, .7, YAHOO.util.Easing.easeOut); 		
		anim.animate(); 
		
		//YAHOO.util.Event.preventDefault(e);
	},
	
	HomeInit : function() {
		Placencia.Flash.init = true;
		Placencia.Flash.isOpen = true;			
		Placencia.Flash.fromHeight = 400;	
	}
};


// ------[ Form ]------------------------------------------------- //
Placencia.Form = { };

Placencia.Form.Select = {
	Init : function() {

		this.selects = YAHOO.util.Dom.getElementsByClassName('select', 'select', 'main-content');
		
		var onSelectedMenuItemChange = function (event) {
			var oMenuItem = event.newValue;
			this.set("label", ("<span class=\"yui-button-label\">" + 
						oMenuItem.cfg.getProperty("text") + "</span>"));
		};


		for(x=0; x<this.selects.length; x++) {
			var sel = this.selects[x];						
			
			span = document.createElement('div');
			span.className = "dhtml-select " + sel.className;
			span.id = "_sel" + x;
			YAHOO.util.Dom.insertBefore(span, sel);
			
			var oSel = new YAHOO.widget.Button({ 																
					id: sel.id,
					name: sel.name,
					label: "<span class=\"yui-button-label\">"+sel[sel.selectedIndex].text+"</span>",
					type: "menu",  
					menu: sel.id, 
					container: span.id														
			}); 
			oSel.on("selectedMenuItemChange", onSelectedMenuItemChange);
			var oSelMenu = oSel.getMenu(); 
			oSelMenu.cfg.setProperty("top", '10px');			
		
		}
	}
};

Placencia.Form.Radio = {
	Init : function() {
		var groups = YAHOO.util.Dom.getElementsByClassName('yui-buttongroup', 'div', 'main-content');			

		for(x=0; x<groups.length; x++) {
			var oButtonGroup = new YAHOO.widget.ButtonGroup(groups[x]);
			
			var radios = YAHOO.util.Dom.getElementsByClassName('radio', 'input', groups[x]);
			for(y=0; y<radios.length; y++) {
				var radio = this.radios[y];									
				var oRadio = new YAHOO.widget.Button(radio, { type: 'radio', label: "" }); 									
			}
		}
	}
};

Placencia.Form.Checkbox = {
	Init : function() {
		this.checkboxs = YAHOO.util.Dom.getElementsByClassName('checkbox', 'input', 'main-content');			
		
		for(x=0; x<this.checkboxs.length; x++) {
			var checkbox = this.checkboxs[x];						
			var oCheckbox = new YAHOO.widget.Button(checkbox, { type: 'checkbox', label: null }); 										
		}
	}
};

Placencia.Form.Calendar = {
	over_cal : false,
	
	Init : function() {		
		this.calendars = YAHOO.util.Dom.getElementsByClassName('calendar', 'input', 'main-content');	
		
		if(this.calendars.length > 0) {		
			var divCalendar = document.createElement('div');
			divCalendar.className = "yui-calendar";
			divCalendar.id = "CalendarContainer";
			document.body.appendChild(divCalendar);
				
			this.Calendar = new YAHOO.widget.Calendar("Calendar","CalendarContainer"); 
			this.Calendar.selectEvent.subscribe(this.getDateFromCalendar, this.Calendar, true); 
			this.Calendar.renderEvent.subscribe(this.setupListeners, this.Calendar, true); 
														
			for(x=0; x<this.calendars.length; x++) {
				var calendar = this.calendars[x];									
				YAHOO.util.Event.addListener(calendar, 'focus', this.showCal); 
				YAHOO.util.Event.addListener(calendar, 'blur', this.hideCal);									
				found = true;
			}
		
			this.Calendar.render(); 
		}
	},
	
	setupListeners : function() { 
		YAHOO.util.Event.addListener('CalendarContainer', 'mouseover', function() { 									 
			Placencia.Form.Calendar.over_cal = true; 
		}); 
		YAHOO.util.Event.addListener('CalendarContainer', 'mouseout', function() { 
			Placencia.Form.Calendar.over_cal = false; 
		}); 
	},
	
	getDateFromCalendar : function() { 
		var calDate = this.getSelectedDates()[0]; 
		calDate = (calDate.getMonth() + 1) + '/' + calDate.getDate() + '/' + calDate.getFullYear(); 

		Placencia.Form.Calendar.cur_field.value = calDate;             
		Placencia.Form.Calendar.over_cal = false; 
		Placencia.Form.Calendar.hideCal(); 
	},
	
	showCal : function(ev) { 
		var tar = YAHOO.util.Event.getTarget(ev); 		
		Placencia.Form.Calendar.cur_field = tar; 
	 
		var xy = YAHOO.util.Dom.getXY(tar), 
			date = YAHOO.util.Dom.get(tar).value; 
		if (date) { 
			Placencia.Form.Calendar.Calendar.cfg.setProperty('selected', date); 
			Placencia.Form.Calendar.Calendar.cfg.setProperty('pagedate', new Date(date), true); 
		} else { 
			Placencia.Form.Calendar.Calendar.cfg.setProperty('selected', ''); 
			Placencia.Form.Calendar.Calendar.cfg.setProperty('pagedate', new Date(), true); 
		} 
		Placencia.Form.Calendar.Calendar.render(); 
		YAHOO.util.Dom.setStyle('CalendarContainer', 'display', 'block'); 
		xy[0] = xy[0] + 20; 
		xy[1] = xy[1] + 16; 

		
		YAHOO.util.Dom.setXY('CalendarContainer', xy); 
	}, 
	
	hideCal : function() { 
		if (!Placencia.Form.Calendar.over_cal) { 
			YAHOO.util.Dom.setStyle('CalendarContainer', 'display', 'none'); 
		} 
	} 	
};

// ------[ Popup Window ]------------------------------------------------- //
Placencia.PopWindow = function(url,w,h,scroll,tools,name,center) {
	var str = "height=" + h + ",innerHeight=" + h;
	str += ",width=" + w + ",innerWidth=" + w;
	if(!center) var center = false;
	if(!scroll) scroll = 0;
	if(!tools) tools = 0;
	if(!name) name = "pop";
	if((window.screen) && (center)) {
		var ah = screen.availHeight - 30;
		var aw = screen.availWidth - 10;
		var xc = (aw - w) / 2;
		var yc = (ah - h) / 2;
		str += ",left=" + xc + ",screenX=" + xc;
		str += ",top=" + yc + ",screenY=" + yc;
		}
	pop = window.open(url,name,'toolbar=' + tools + ',location=0,directories=0,status=0,menubar=0,scrollbars=' + scroll + ',resizable=1,' + str).focus();
};

// ------[ Browser Detection ]------------------------------------------------- //
// ------[ http://www.quirksmode.org/js/detect.html ]------------------------------------------------- //
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";		
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

