/**
 * brainGuide.com
 *
 * (en) 310-company-detail: Include/Init of all relevant JS Files Functions
 * (de) 310-company-detail: Einf�gen/Initialisierung aller relevanten JS Dateien/Funktionen
 *
 * @copyright       Copyright 2008, Thomas Kalteis brainGuide AG
 * @version         1.0
 * @revision        $Revision: 10 $
 * @lastmodified    $Date: 2008-04-09
 */
 /****** 1 Global variables ******/
 /****** 2 Include needed JS files ******/
 /****** 3 Init all JS Datasets and Obersver ******/
 /****** 4 Footer init all widgets after page is loaded  ******/
 /****** 5 Page specific custom functions ******/
 
 
 
 
 /****** 1 Global variables ******/
	var companyId;
	var publicationsPage = 1;
	var publicationsPages;
	var eventsPage = 1;
	var eventsPages;
	var eventsArchivePage = 1;
	var eventsArchivePages;
	var personsPage = 1;
	var personsPages;
	var intorductionToggle;
	var newsFade;
	var statusRecommendationFade;
	var statusContactFade;
	var helpSP;
	var tp_company_list;
	
	var tp_company_detail;
	var tp_company_detail_selected;
	var tp_statistik;
	
	 //var dsCompanyPersons;
	 var dsCompanyPublications;
	 var dsCompanyEvents;
	
	var clickHeatSite;
	var clickHeatGroup;
	var clickHeatServer;

// var start = 1;
// var perdatapage = 5;
// var end = start + perdatapage;

 
 /****** 2 Include needed JS files ******/ 
/* (en) 310-company-detail: Include needed JS Files */
/* (de) 310-company-detail: Einf�gen der ben�tigte JS Dateien */





 /****** 3 Init all JS Datasets and Obersver ******/
/* (en) Calls the function to init all databindings */ 
/* (de) Ruft die Funktion zur Initalisierung der Datenverbindungen auf */

function initJS(id) {
	
	
	companyId = id;
	/* (en) Debug window: Setting opens the window */
	/* (de) Debug Fenster: Einstellung �ffnet das Debug Fenster */
	//Spry.Data.Region.debug=true;

	// fade effect for status messages
	/* statusRecommendationFade = new Spry.Effect.Fade('status-message-recommendation',{duration: 1000, from: 0, to: 100}); */
	/*statusContactFade = new Spry.Effect.Fade('status-message-contact',{duration: 1000, from: 0, to: 100}); */
	
	// nested data set for the company's publication
	//dsCompanyPersons = new Spry.Data.JSONDataSet(getURLCompanyPersons(), {subPaths: "items"});
	// nested data set for the company's publication
	dsCompanyPublications = new Spry.Data.JSONDataSet(getURLCompanyPublications(), {subPaths: "items"});
	// data source for the company's current events
	dsCompanyEvents = new Spry.Data.JSONDataSet(getURLCompanyEvents(false), {subPaths: "items"});
	// data source for the company's archived events
	dsCompanyArchivedEvents = new Spry.Data.JSONDataSet(getURLCompanyEvents(true), {subPaths: "items"});

	/* (en) Observer: Adding Observer for Datasets */
	/* (de) Observer: F�ght die Oberserver zu den Datasets hinzu */
	
}
	



 /****** 4 Footer init all widgets after page is loaded  ******/
function initFooter() {
	
/* (en) Systemnavigation: Init Layer System Navigation */
/* (de) Systemnavigation: Initialisierung der Systemnavigation  */	
	var sysnav = new Spry.Widget.MenuBar("sysnav");
	
	
/* (en) Help: init the help introduction panel */
/* (de) Hilfe: Initialisierung des Hilfe Panels */
	//var sp = new Spry.Widget.SlidingPanels("help");
	//try {  newsFade = new Spry.Effect.Fade('news', {duration: 1500, from: 20, to: 100, toggle:true});} catch(err) {}
	//try { intorductionToggle = new Spry.Effect.Slide('intorductionToggle', {duration: 1000, from: '0px', to: '195px', toggle: true});} catch(err) {}
	
	try { sendToAFriendFade = new Spry.Effect.Fade('sendToAFriend', {toggle:true});} catch(err) {}
	try { helpSP = new Spry.Widget.SlidingPanels("help");} catch(err) {}
	
	/* Hides Static Lists */
	//Spry.Utils.addClassName('li_experts_static','hide');
	
	
/* (en) Toolbar: Spry widgets in #col1  */
/* (de) Toolbar: Initialisiert die Spry Widgets von #Col1 */
	
	if(document.getElementById('cp_company_themes')) {
		var cp_company_themes = new Spry.Widget.CollapsiblePanel("cp_company_themes", {enableAnimation:false});
	}
	
/* (en) Content: Spry widgets in #col3  */
/* (de) Content: Initialisiert die Spry Widgets von #Col3 */

	//try { tp_company_detail = new Spry.Widget.TabbedPanels("tp_company_detail"); } catch(err) {}
	// check the anchors (var params defined in global.js)
	//params = Spry.Utils.getLocationParamsAsObject();
	/*if(params.panel) {
		initCompanyNavigation(params.panel);
	}*/
	
	/*tp_company_list = new Spry.Widget.TabbedPanels("tp_company_list", {defaultTab: params.tab ? params.tab : 0});*/
	try { tp_company_list = new Spry.Widget.TabbedPanels("tp_company_list"); } catch(err) {}
	
	
	try { var cp_company_list = new Spry.Widget.CollapsiblePanel("cp_company_list", {enableAnimation:false}); } catch(err) {}
	try { var tp_li_events = new Spry.Widget.TabbedPanels("li_events"); } catch(err) {}
	
/* (en) Init of the heatmap */
/* (de) Initialisierung der Heatmap */	
	//try {configHeatMap();} catch(err) { }	



/* (en) Init validation of send to a friend form fields */
/* (de) Initialisierung der Validierung f�r Sendt2Friend Formularfelder */
	initSendToFriendValidation(); 
	initCompanyContactValidation(); 
	initCompanyRecommendationValidation(); 
	
/* (en) Applys round Corners to the specified elements */
/* (de) Runded die Ecken der ausgew�hlten Container ab */
	roundAll();


/* (en) Check for #Anchors */
/* (de) Prüfe ob #Anchors vorhanden */

location.hash == location.href.split('#')[1];

	switch(location.hash) {		
		case '#event':
				var test = Spry.$$("div#company_events");
				if (test != null) {
					try {tp_company_list.showPanel('company_events');} catch(err) { };
					try {location.href=location.href;} catch(err) { };
				}
			break;
		case '#publication':
				var test = Spry.$$("div#company_publications");
				if (test != null) {
					try {tp_company_list.showPanel('company_publications');} catch(err) { };
					try {location.href=location.href;} catch(err) { };
				}
			break;
	}
	
	
	
}




 /****** 5 Page specific custom functions ******/
/* (en) Site specific Functions */ 
/* (de) Seitenspezifische Funktionen */


/**
  * Observer 
  */
  
// Objects that wish to observe a data set must define a callback method
// for each notification it wishes to receive. In this example, our object
// will only be called for PostLoad and DataChanged notifications.


/* (en) Configuration of the HeatMap */ 
/* (de) Konfiguration der Heatmap */

function configHeatMap() {
	
	/* Set Local File Name */
	clickHeatSite = '';
	clickHeatGroup = 'company_detail';
	clickHeatServer = '/clickheat/click.php';
	initClickHeat();
	
}


function showContact() {
	Spry.$$("div#contact").removeClassName("hide");
	Spry.$$("div#contact").removeAttribute("style");
}


function hideContact() {
	Spry.$$("div#contact").addClassName("hide");
	
}

function showStatistic() {
	Spry.$$("*.statDetail").toggleClassName("hide");
	Spry.$$("a#companyStatistic").toggleClassName("down");
}


/**
 * Setting Url to JSON Dataset
 */
function getURLCompanyPersons() {
	var s = "json/controller.do?path=/companies&method=companyPersonOverviewData&companyId=" + companyId;
	if(publicationsPage) {
		s += "&page=" + personsPage;
	}
	return s;
}

function getURLCompanyPublications() {
	var s = "json/controller.do?path=/companies&method=companyPublicationOverviewData&companyId=" + companyId;
	if(publicationsPage) {
		s += "&page=" + publicationsPage;
	}
	return s;
}

function getURLCompanyEvents(archived) {
	var s;
	if(archived) {
		s = "json/controller.do?path=/companies&method=companyEventOverviewData&companyId=" + companyId + "&archive=1";
		if(eventsArchivePage) {
			s += "&page=" + eventsArchivePage;
		}
	} else {
		s = "json/controller.do?path=/companies&method=companyEventOverviewData&companyId=" + companyId + "&archive=0";
		if(eventsPage) {
			s += "&page=" + eventsPage;
		}
	}
	return s;
}

/**
 * Paging function, loads the previous page with company publications.
 */
function prevPagePublications() {
	// do nothing if current page is page 1
	if(publicationsPage == 1) {
		return;
	}
	// decrement page
	publicationsPage = publicationsPage - 1;
	// load the data
	dsCompanyPublications.setURL(getURLCompanyPublications(), {subPaths: "items"});
	dsCompanyPublications.loadData();
}

/**
 * Paging function, loads the next page with company publications.
 */
function nextPagePublications() {
	// return if last page reached
	if(publicationsPage == dsCompanyPublications.getData()[0]["publicationsPages"]) {
		return;
	}
	// load data for requested page
	publicationsPage = publicationsPage + 1;
	dsCompanyPublications.setURL(getURLCompanyPublications(), {subPaths: "items"});
	dsCompanyPublications.loadData();
}

/**
 * Paging function, loads the previous page with company experts.
 */
function prevPagePersons() {
	// do nothing if current page is page 1
	if(personsPage == 1) {
		return;
	}
	// decrement page
	personsPage = personsPage - 1;
	// load the data
	dsCompanyPersons.setURL(getURLCompanyPersons(), {subPaths: "items"});
	dsCompanyPersons.loadData();
}

/**
 * Paging function, loads the previous page with company experts.
 */
function nextPagePersons() {
	// return if last page reached
	if(personsPage == dsCompanyPersons.getData()[0]["personsPages"]) {
		return;
	}
	// load data for requested page
	personsPage = personsPage + 1;
	dsCompanyPersons.setURL(getURLCompanyPersons(), {subPaths: "items"});
	dsCompanyPersons.loadData();
}

/**
 * Paging function, loads the previous page with company events.
 */
function prevPageEvents(archive) {
	// do nothing if current page is page 1
	if(archive) {
		if(eventsArchivePage == 1) {
			return;
		}
		// decrement page
		eventsArchivePage = eventsArchivePage - 1;
		// load the data
		dsCompanyArchivedEvents.setURL(getURLCompanyEvents(archive), {subPaths: "items"});
		dsCompanyArchivedEvents.loadData();
	} else {
		if(eventsPage == 1) {
			return;
		}
		// decrement page
		eventsPage = eventsPage - 1;
		// load the data
		dsCompanyEvents.setURL(getURLCompanyEvents(archive), {subPaths: "items"});
		dsCompanyEvents.loadData();
	}
	
}

/**
 * Paging function, loads the next page with company events.
 */
function nextPageEvents(archive) {
	// do nothing if current page is page 1
	if(archive) {
		// return if last page reached
		if(eventsArchivePage == dsCompanyArchivedEvents.getData()[0]["eventsArchivePages"]) {
			return;
		}
		// increment page
		eventsArchivePage = eventsArchivePage + 1;
		// load the data
		dsCompanyArchivedEvents.setURL(getURLCompanyEvents(archive), {subPaths: "items"});
		dsCompanyArchivedEvents.loadData();
	} else {
		if(eventsPage == dsCompanyEvents.getData()[0]["eventsPages"]) {
			return;
		}
		// increment page
		eventsPage = eventsPage + 1;
		// load the data
		dsCompanyEvents.setURL(getURLCompanyEvents(archive), {subPaths: "items"});
		dsCompanyEvents.loadData();
	}
}


/**
 * Initializes validation for person contact form fields
 */
function initCompanyContactValidation() {
	var senderName = new Spry.Widget.ValidationTextField("cc-sender-name", "none", {isRequired:true});
	var senderEmail = new Spry.Widget.ValidationTextField("cc-sender-email", "email", {isRequired:true});
	var message = new Spry.Widget.ValidationTextarea("cc-message", {isRequired:true});
}
/**
 * initializes validation for person recommendation form fields
 */
function initCompanyRecommendationValidation() {
	var textId = new Spry.Widget.ValidationRadio("cr-text");
}

/**
 * Validates the contact form and submits it if validation succeeds
 */
function validateCompanyContact(form){
	if (Spry.Widget.Form.validate(form) == true){
		document.getElementById('loading-contact').style.display = "inline";
		Spry.Utils.submitForm(form, companyContactSuccessCallback, {additionalData:'companyId=' + companyId, errorCallback: companyContactErrorCallback});
	}
	return false;
}

/**
 * validates the recommendation form and submits it if validation succeeds
 */
function validateCompanyRecommendation(form){
	if (document.getElementById('recommendationText').value.length > 0 || Spry.Widget.Form.validate(form) == true){
		document.getElementById('loading-recommendation').style.display = "inline";
		Spry.Utils.submitForm(form, companyRecommendationSuccessCallback, {additionalData:'companyId=' + companyId, errorCallback: companyRecommendationErrorCallback});
	}
	return false;
}

/**
 * Callback function to handle the response of the company
 * contact form after submit via XHR.
 */
function companyContactSuccessCallback(req) {
	// req.xhRequest.status
	var ds = new Spry.Data.JSONDataSet();
	// load the returned json data into a dataset
	ds.loadDataIntoDataSet(req.xhRequest.responseText);
	// set the css class appropriate to the returned message type
	if(ds.getData()[0]["name"] == "message") {
		Spry.Utils.removeClassName(document.getElementById("status-message-contact"), "error");
		Spry.Utils.addClassName(document.getElementById("status-message-contact"), "confirmation");
		// reset form
		document.getElementById("companyForm").reset();
	}
	if(ds.getData()[0]["name"] == "error") {
		Spry.Utils.removeClassName(document.getElementById("status-message-contact"), "confirmation");
		Spry.Utils.addClassName(document.getElementById("status-message-contact"), "error");
	}
	// display returned message
	document.getElementById("status-message-contact").innerHTML = '<p>' + ds.getData()[0]["message"] + '</p>';
	document.getElementById("status-message-contact").style.display = "block";
	statusContactFade.start();
	// hide loading image
	document.getElementById('loading-contact').style.display = "none";
}

/**
 * Callback function to handle the response of the company contact 
 * form after submit via XHR and a system error occurs.
 */
function companyContactErrorCallback(req) {
	// display an error message
	Spry.Utils.removeClassName(document.getElementById("status-message-contact"), "confirmation");
	Spry.Utils.addClassName(document.getElementById("status-message-contact"), "error");
	document.getElementById("status-message-contact").innerHTML = "<p>Es ist ein Systemfehler aufgetreten! Bitte versuchen Sie es später noch einmal.</p>";
	statusContactFade.start();
	// hide loading image
	document.getElementById('loading-contact').style.display = "none";
}

/**
 * Callback function to handle the response of the recommend
 * company form after submit via XHR.
 */
function companyRecommendationSuccessCallback(req) {
	var ds = new Spry.Data.JSONDataSet();
	// load the returned json data into a dataset
	ds.loadDataIntoDataSet(req.xhRequest.responseText);
	// set the css class appropriate to the returned message type
	if(ds.getData()[0]["name"] == "message") {
		Spry.Utils.removeClassName(document.getElementById("status-message-recommendation"), "error");
		Spry.Utils.addClassName(document.getElementById("status-message-recommendation"), "confirmation");
	}
	if(ds.getData()[0]["name"] == "error") {
		Spry.Utils.removeClassName(document.getElementById("status-message-recommendation"), "confirmation");
		Spry.Utils.addClassName(document.getElementById("status-message-recommendation"), "error");
	}
	// display returned message
	document.getElementById("status-message-recommendation").innerHTML = '<p>' + ds.getData()[0]["message"] + '</p>';
	statusRecommendationFade.start();
	// reset form
	document.getElementById("recommendationForm").reset();
	// hide loading image
	document.getElementById('loading-recommendation').style.display = "none";
}

/**
 * Callback function to handle the response of the company recommendation 
 * form after submit via XHR and a system error occurs.
 */
function companyRecommendationErrorCallback(req) {
	// display an error message
	Spry.Utils.removeClassName(document.getElementById('status-message-recommendation'), "confirmation");
	Spry.Utils.addClassName(document.getElementById('status-message-recommendation'), "error");
	document.getElementById('status-message-recommendation').innerHTML = "<p>Es ist ein Systemfehler aufgetreten! Bitte versuchen Sie es später noch einmal.</p>";
	statusRecommendationFade.start();
	// hide loading image
	document.getElementById('loading-recommendation').style.display = "none";
}

/**
 * Function for navigation handling. This function keeps track of the company context navigation panel.
 */
function initCompanyNavigation(id) {
	// remember active tab
	tp_company_detail_selected = id;
	switch (tp_company_detail_selected) {
	  case 4:	// contact
		document.getElementById("status-message-contact").style.display = "none";
		document.getElementById("companyForm").style.display = "none";
	    break;
	  case 5:	// recommendation
		// hide form and show loading image
		document.getElementById("recommendation_login_loader").style.display = "block";
		document.getElementById("recommendation_login_request").style.display = "none";
		document.getElementById("status-message-recommendation").style.display = "none";
		document.getElementById("recommendationForm").style.display = "none";
	    break;
	  default:
	    break;
	}
	// show the panel
	//tp_company_detail.showPanel(id);
	// check if a user is registered
	isUserRegistered(isUserRegisteredCallback);
}

/**
 *  Callback function to handle the response of the isUserRegistered() call 
 */
function isUserRegisteredCallback(req) {
	// check status code
	var ds = new Spry.Data.JSONDataSet();
	// load the returned json data into a dataset
	ds.loadDataIntoDataSet(req.xhRequest.responseText);
	// display content
	if(ds.getData()[0]["email"]) {		// logged in user found
		switch (tp_company_detail_selected) {
		  case 4:	// contact
			// hide loading image and show form
			document.getElementById("contact_login_loader").style.display = "none";
			document.getElementById("companyForm").style.display = "block";
		    break;
		  case 5:	// recommendation
			// hide loading image and show form
			document.getElementById("recommendation_login_loader").style.display = "none";
			document.getElementById("recommendationForm").style.display = "block";
			window.location.hash="recommendationForm"; 
		    break;
		  default:
		    break;
		}
	} else {	// no logged in user found...
		switch (tp_company_detail_selected) {
		  case 4:	// contact
			// hide loading image and show login request
			document.getElementById("contact_login_loader").style.display = "none";
			document.getElementById("contact_login_request").style.display = "block";
		    break;
		  case 5:	// recommendation
			// hide loading image and show form
			document.getElementById("recommendation_login_loader").style.display = "none";
			document.getElementById("recommendation_login_request").style.display = "block";
		    break;
		  default:
		    break;
		}
	}
}

/**
 *  Resets the selection of a radio button in the recommendation form
 */
function resetRadiobutton() {
	var elements = document.getElementsByName("textId");
	for (var i=0; i < elements.length; i++) {
		if(elements[i].checked) {
			elements[i].checked = false;
		}
	}
}

/**
 * Redirects the user to the cas login screen and appends the current detail page URL
 * as service URL to the login request.
 * 
 * @param panel The active person navigation panel
 */
function ssoRedirect(panel){
	var service = window.location.protocol + "//" + window.location.hostname;
	
	if(panel) {
		var queryString = "/controller.do?path=/company&method=detail&area=2&companyId=" + companyId;
		var hash = window.location.hash;
		
		if(queryString) {
			params = Spry.Utils.getLocationParamsAsObject();
			// check if panel param available
			if(!params.panel) {
				service += queryString + "&panel=" + panel;
			} else {
				service += queryString;
			}
		} else {
			service += "?panel=" + panel;
		}
		// add hash to service url
		if(hash) {
			service += hash;
		}
	}
	window.location.href = "https://secure.brainguide.com:443/cas/login?service=" + escape(service);
}