YAHOO.namespace("Youniverse");

YAHOO.Youniverse.module = function()
{
	var userId;
	var status;
	var moduleId;
	var moduleName;
	var dialogModule;
	var landingPage;
	var processPage;
	var resultsPage;
	
	/**
	 * Set to true when a click has been made, so extra clicks can't be made. Reset upon AJAX success
	 */
	var clicked;
	
	/*
	* Initialise class when window dom loaded
	*/
	this.initClass = function ()
	{
		this.clicked = false;
	}
	
	this.setLandingPage = function (pageUrl)
	{
		landingPage = pageUrl;
	}
	
	this.setProcessPage = function (pageUrl)
	{
		processPage = pageUrl;
	}
	
	this.setResultsPage = function (pageUrl)
	{
		resultsPage = pageUrl;
	}
	
	/*
	* Load Module	
	*/
	this.loadModule = function (modId, modName, statementID, qnID)
	{
		moduleId = modId;
		moduleName = modName;
		
		var callback =
		{
			success: this.onLoadModule,
			failure: this.ajaxFailure,
			cache: false
		};
		
		var urlString = "/statement/module_process/" + moduleId + '/' + moduleName;
		if (statementID && qnID)
		{
			urlString += "/" + statementID + "/" + qnID;
		}
		
		var request = YAHOO.util.Connect.asyncRequest('GET', urlString, callback);
	}
	
	/**
	 * onLoadModule Status
	 * 
	 */
	this.onLoadModule = function (o)
	{
		var responseObject = YAHOO.lang.JSON.parse(o.responseText);
		
		floatingModule.setLandingPage(responseObject.landingPage);
		floatingModule.setResultsPage(responseObject.resultsPage);
		floatingModule.setProcessPage(responseObject.processPage);
		
		clicked = false; // reset the click flag
		
		if (responseObject.status == 'statements')
		{
			floatingModule.createStatements(responseObject);
		}
		else if (responseObject.status == 'demographics')
		{
			floatingModule.createDemographics(responseObject);
			
			//Analytics
			pageTracker._trackPageview('/statement/module/'+moduleName+'/'+moduleId+'/demographics');
		}
		else
		{
			floatingModule.createProcessingPage();
			
			//Analytics
			pageTracker._trackPageview('/statement/module/'+moduleName+'/'+moduleId+'/completed');
		}
	}
	
	/*
	* Create Statments
	*/
	this.createStatements = function (responseObject)
	{
		var modulePanelBD = document.createElement('div');
		modulePanelBD.setAttribute('id', 'modulePanelBD');
		modulePanelBD.innerHTML = "<h2 class='module'>" + responseObject.statement_text + "</h2>";
		
		var inner = document.createElement('div');
		inner.setAttribute('id', 'inner');
		inner.className = 'inner';
		
		var imageObj = responseObject.images_list;
		var noImages = imageObj.length;
		
		for (var i = 0; i < noImages; i++)
		{
			inner.innerHTML += "<a href='#" + moduleId + "'><img id='" + imageObj[i].id + "' border='0' alt='' onClick =\"floatingModule.saveStatement('" + responseObject.statement_id + "','" + imageObj[i].id + "'); return false;\" src='"+imageObj[i].src+"'/></a>";
		}
		
		modulePanelBD.appendChild(inner);
		
		modulePanelBD.innerHTML += "<div id='cancelButton' class='imageLabel'><div class='image' style='float: left;' title='" + responseObject.statementButtons.cancel + "' onclick='floatingModule.cancelButton(); return false;'/></div><div class='caption' style='float: left; width: 50px; display: table;'><a class='captionLink' style='position: absolute; bottom: 0px;' onclick='floatingModule.cancelButton(); return false;' href='#' tip='" + responseObject.statementButtons.cancel + "'>" + responseObject.statementButtons.cancel + "</a></div></div>";
		modulePanelBD.innerHTML += "<div id='redoButton' class='imageLabel'><div class='image' style='float: left;' title='" + responseObject.statementButtons.redo + "' onclick='floatingModule.redoModule(\""+moduleId+"\"); return false;'/></div><div class='caption' style='float: left; width: 30px; display: table;'><a class='captionLink' style='position: absolute; bottom: 0px;' onclick='floatingModule.redoModule(\""+moduleId+"\"); return false;' href='#' tip='" + responseObject.statementButtons.redo + "'>" + responseObject.statementButtons.redo + "</a></div></div>";
		
		
		this.displayModule(modulePanelBD);
		
		randomizeImages();
		
		//Analytics
		pageTracker._trackPageview('/statement/module/'+moduleName+'/'+moduleId+'/statement/'+responseObject.statement_id);
	}
	
	this.writeMonthOptions = function (select)
	{
		var months = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
		
		select.options[0] = new Option('Month','');
		
		for (monthCounter = 1; monthCounter < months.length; monthCounter++)
		{
			select.options[monthCounter] = new Option(months[monthCounter - 1], monthCounter );
		}
	}
	
	/*
	* Create Demographics
	*/
	this.createDemographics = function (responseObject)
	{
		var modulePanelBD = document.createElement('div');
		modulePanelBD.setAttribute('id', 'modulePanelBD');
		
		var col1 = document.createElement('div');
		col1.setAttribute('id', 'col1');
		modulePanelBD.appendChild(col1);
		
		col1.innerHTML = responseObject.demographicHeader;
		
		var col2 = document.createElement('div');
		col2.setAttribute('id', 'col2');
		col2.className="demog";
		modulePanelBD.appendChild(col2);
		
		var profileContentForm = document.createElement('form');
		profileContentForm.setAttribute('id', 'profileContentForm');
		profileContentForm.setAttribute('method', 'post');
		profileContentForm.setAttribute('action', 'javascript: floatingModule.saveDemographics(); return false;');
		
		var demographics = responseObject.demographics;
		
		for (var i in demographics)
		{
			if (i == "dob")
			{
				var dob = document.createElement('div');
				dob.className = 'input';
				
				dob.innerHTML += "<label for='SettingsDobMonth'>" + demographics[i].label + "</label>";
				
				var day = document.createElement('select');
				day.setAttribute('id', 'SettingsDobDay');
				day.setAttribute('name','data[Settings][dob][day]');
				
				day.options[0] = new Option(demographics[i].dayLabel,'');
				
				for (var count = 1; count <= 31; count++)
				{
					day.options[count] = new Option(count, count);
				}
				dob.appendChild(day);
				
				var month = document.createElement('select');
				month.setAttribute('id', 'SettingsDobMonth');
				month.setAttribute('name','data[Settings][dob][month]');
				var count = 0;
				for (var entry in demographics[i].months.entries)
				{
					month.options[count] = new Option(demographics[i].months.entries[entry], entry);
					count++;
				}
				dob.appendChild(month);
				
				var year = document.createElement('select');
				year.setAttribute('id', 'SettingsDobYear');
				year.setAttribute('name','data[Settings][dob][year]');
				year.options[0] = new Option(demographics[i].yearLabel, '');
				
				var currentTime = new Date();
				var currentYear = currentTime.getFullYear();
				
				var count = 1;
				for (var i = currentYear - 13; i > 1900; i--)
				{
					year.options[count] = new Option(i, i);
					count++;
				}
				
				dob.appendChild(year);
				
				profileContentForm.appendChild(dob);
			}
			else
			{
				var settings = demographics[i].settings;
				var entries = demographics[i].entries;
				
				if (settings)
				{
					var demog = document.createElement('div');
					demog.className = 'input';
					demog.innerHTML += "<label for='" + settings.forInput + "'>" + settings.label + "</label>";
					var demogSel = document.createElement('select');
					demogSel.setAttribute('id', settings.id);
					demogSel.setAttribute('name',settings.name);
					//demogSel.options[0] = new Option('', '');
					
					var count = 0;
					for (var entry in entries)
					{
						demogSel.options[count] = new Option(entries[entry], entry);
						count++;
					}
					
					demog.appendChild(demogSel);
					
					profileContentForm.appendChild(demog);
				}
			}
		}
		
		profileContentForm.innerHTML += responseObject.demographicFooter;
		
		var formButtons= document.createElement('div');
		
		formButtons.className = 'formButtons';
		profileContentForm.appendChild(formButtons);
		var extraStyle = "";
        if (responseObject.demographicSubmitStyle)
        {
            extraStyle = responseObject.demographicSubmitStyle;
        }
		
        formButtons.innerHTML += "<div id='submitDemogButton' class='imageLabel'><a href='#' class='image' style='float: left;" + extraStyle + "' title='" + responseObject.demographicSubmit + "' onclick='floatingModule.saveDemographics();return false;'/></a><div class='caption' style='float: left; display: table;'><a class='captionLink' style='position: absolute; bottom: 0px;' onclick='floatingModule.saveDemographics(); return false;' href='#' tip='" + responseObject.demographicSubmit + "'>" + responseObject.demographicSubmit + "lorem ipsum</a></div></div>";
        formButtons.innerHTML += "<div id='cancelButton' class='imageLabel'><a  href='#' class='image' style='float: left;' title='" +responseObject.demographicCancel + "' onclick='floatingModule.cancelButton(); return false;'/></a><div class='caption' style='float: left; display: table;'><a class='captionLink' style='position: absolute; bottom: 0px;' onclick='floatingModule.cancelButton(); return false;' href='#' tip='" + responseObject.demographicCancel + "'>" + responseObject.demographicCancel + "</a></div></div>";
		
		col2.appendChild(profileContentForm);
		
		this.displayModule(modulePanelBD);
	}
	
	/*
	* displayModule
	* @ moduleContent is Div is display	
	*/
	this.displayModule = function(moduleContent)
	{
		var moduleContainer = document.getElementById('moduleContainer');
		moduleContainer.innerHTML="";
		moduleContainer.appendChild(moduleContent);
		
		var cap = document.createElement('div');
		cap.className = 'cap';
		
		moduleContainer.appendChild(cap);
	}
	
	/*
	 * Randomize images
	 */
	function randomizeImages()
	{
		var inner = document.getElementById('inner');
		ims = inner.getElementsByTagName("a");
		
		for (i = 0; i < ims.length * 2; i++)
		{
			el1 = ims[Math.round(getRandomArbitary(0, ims.length - 1))];
			el2 = ims[Math.round(getRandomArbitary(0, ims.length - 1))];
			el2.parentNode.insertBefore(el2, el1);	
		}
	}
	
	/*
	 * Get random arbitrary number
	 */
	function getRandomArbitary(min, max)
	{
		return Math.random() * (max - min) + min;
	}
	
	/**
	 * Save Statement
	 */
	this.saveStatement = function(statementID, qnID)
	{
		// check if user has already clicked an image. Ignore the click if they have
		if (clicked == false)
		{
			this.fadeOutInner();
			floatingModule.loadModule(moduleId, moduleName, statementID, qnID);
			clicked = true;
		}
	}
	
	/**
	 * Send Demographics
	 * 
	 */
	this.saveDemographics = function ()
	{
		var postData = '';

		var SettingsDobDay = document.getElementById('SettingsDobDay');
		if(SettingsDobDay)
		{
			postData += 'data[Settings][dob][day]=' + SettingsDobDay.value;
		}
		var SettingsDobMonth = document.getElementById('SettingsDobMonth');
		if(SettingsDobMonth)
		{
			postData += '&data[Settings][dob][month]=' + SettingsDobMonth.value;
		}
		var SettingsDobYear = document.getElementById('SettingsDobYear');
		if(SettingsDobYear)
		{
			postData += '&data[Settings][dob][year]=' + SettingsDobYear.value;
		}
		var SettingsGender = document.getElementById('SettingsGender');
		if(SettingsGender)
		{
			postData += '&data[Settings][gender]=' + SettingsGender.value;
		}
		var SettingsCountry = document.getElementById('SettingsCountry');
		if(SettingsCountry)
		{
			postData += '&data[Settings][country]=' + SettingsCountry.value;
		}

		var callback =
		{
			success: this.onSaveDemographics, 
			failure: this.ajaxFailure,
			cache: false
		};
		
		var cObj = YAHOO.util.Connect.asyncRequest('POST', '/settings/demographic_updates', callback, postData);
		
		
		/*var formObject = document.getElementById("profileContentForm");
		YAHOO.util.Connect.setForm(formObject, true, true);
		
		var callback =
		{
			success: this.onSaveDemographics,
			failure: this.ajaxFailure,
			cache: false
		};
		
		var cObj = YAHOO.util.Connect.asyncRequest('POST', formObject.action, callback);*/
	}
	
	/*
	* onSaveDemographics
	*/
	this.onSaveDemographics = function(o)
	{
		eval(o.responseText);
		if (demographicsSaved == 1)
		{
			floatingModule.loadModule(moduleId, moduleName);
		}
	}
	
	/*
	* Create processing page
	*/
	this.createProcessingPage = function ()
	{		
		var modulePanelBD = document.createElement('div');
		modulePanelBD.setAttribute('id', 'modulePanelBD');
		modulePanelBD.innerHTML = "";
				
		var inner = document.createElement('div');
		inner.setAttribute('id', 'inner');
		inner.className = 'inner';
	
		modulePanelBD.appendChild(inner);
		
		var process = document.createElement('div');
		process.setAttribute('id', 'moduleProcess');
		inner.appendChild(process);
		
		//Temp fix Check for browser
		var browser=navigator.appName;
		var b_version=navigator.appVersion;
		var version=parseFloat(b_version);
		if ((browser=="Microsoft Internet Explorer") && (version<=6))
		{
			process.innerHTML = "<img src='/img/module/loader_circles_02a_forgif.gif' />";
		} else 
		{
			process.innerHTML = '<object width="115" height="100"><param name="movie" value="/swf/module/loader_circles.swf"><embed src="/swf/module/loader_circles.swf" width="115" height="100"></embed></object>';	
		}
		
		this.displayModule(modulePanelBD);
		this.processModule();
	}
	
	/**
	 *  Process Module
	 */
	this.processModule = function ()
	{
		window.location = processPage;
	}
	
	/*
	* Ajax Failure	
	*/
	this.ajaxFailure = function (o)
	{
		if (o.status > -1) // if not user abort
		{
			alert(msg.translate('err01'));
		}
	}
	
	/*
	* Fade out the inner div
	*/
	this.fadeOutInner = function()
	{
		var inner = YAHOO.util.Dom.get('inner');
		new YAHOO.widget.Effects.Fade(inner);
	}
	
	/*
	* Cancel
	*
	*/
	this.cancelButton = function ()
	{
		window.location = landingPage;
	}
	
	/*
	* Redo module
	*
	*/
	this.redoModule = function (moduleID)
	{
		window.location = "/statement/retake/"+ moduleName + "/" + moduleID;
	}
	
}
