/**
 * Copyright 2008 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @fileoverview This file contains the dynamic loader for CalVis.
 * @author api.austin@google.com (Austin Chau)
 */

// Namespace to protect this library from conflicting with external.
function main() {
  var calId = 'svwitten23%40googlemail.com';

  var calendar = new calvis.Calendar();

  // set the CSS IDs for various visual components for the calendar container
  calendar.setCalendarBody('calendarBodyDiv');
  calendar.setStatusControl('statusControlDiv');
  calendar.setNavControl('navControlDiv');
  calendar.setViewControl('viewControlDiv');
  calendar.setEventCallback('mouseover', displayEvent);

  // set the calenar to pull data from this Google Calendar account
  calendar.setPublicCalendar(calId);  
  calendar.setLoginControl('loginControlDiv');  

  calendar.setDefaultView('month');
  // display the calendar
  calendar.render();  
}

function displayEvent(event) {    
  var title       = event.getTitle().getText();  
  // Start Date
  var start_date  = event.getTimes()[0].getStartTime().getDate();


  // End Date
  var end_date    = event.getTimes()[0].getEndTime().getDate();
  var content     = event.getContent().getText();  
  var location_   = event.getLocations()[0].getValueString().split('@')[0];


  var start_datum = DeutscheDatum (""+start_date);
  var ende_datum  = DeutscheDatum (""+end_date);
  
  
  var eventHtml = [];
  eventHtml.push('<div class="closeDataBox"><a href="javascript://" onclick="HideCalendar();">Eintrag schließen</a></div>');
  eventHtml.push('<span class="showDataBox">Von:</span>'); 
  eventHtml.push('<p>');
  eventHtml.push(start_datum);
  eventHtml.push('</p>');
  eventHtml.push('<br class="breaker" />');
  eventHtml.push('<span class="showDataBox">Bis:</span>'); 
  eventHtml.push('<p>');
  eventHtml.push(ende_datum)
  eventHtml.push('</p>');
  eventHtml.push('<br class="breaker" />');
  eventHtml.push('<span class="showDataBox">Was:</span>'); 
  eventHtml.push('<p>');
  eventHtml.push(title);
  eventHtml.push('</p>');
    eventHtml.push('<br class="breaker" />');
  eventHtml.push('<span class="showDataBox">Detail:</span>'); 
  eventHtml.push('<p>');
  eventHtml.push(content);
  eventHtml.push('</p>');
    eventHtml.push('<br class="breaker" />');
  eventHtml.push('<span class="showDataBox">Ort:</span>'); 
  eventHtml.push('<p>');
  eventHtml.push(location_);
  eventHtml.push('</p>');

  document.getElementById('eventDisplayDiv').innerHTML = eventHtml.join('');
}      


function DeutscheDatum (quellText) {

	//Suche nach "GMT"
	var suchTextArray = new Array("UTC", "GMT");
	var posSuchText='';
		for (i = 0; i < suchTextArray.length; i++) {
		posSuchText     = quellText.indexOf(suchTextArray[i], 0);
			if(posSuchText !='-1'){
				var neuerQuellText  = quellText.substring(0, posSuchText);
				var suchTextArray='';
			}
		}
	
	
	
	// Suche nach Wochentag
	var englischerWochentagAlt = neuerQuellText.substring(0, 3);
	
	//Tausche Wochentag aus.
	var deutschWochentag  = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch","Donnerstag", "Freitag", "Samstag");
	var englischWochentag = new Array("Sun", "Mon", "Tue", "Wed","Thu", "Fri", "Sat");
	
	for (i = 0; i < englischWochentag.length; i++) {
		
		if (englischWochentag[i]== englischerWochentagAlt){
			
			var wochentagNeu = deutschWochentag[i];
		}
		
	}
	
	// Suche nach Mo
	var englischerMonatAlt = neuerQuellText.substring(4, 7);
	
	//Tausche Monat aus.
	var deutschMonat  = new Array('Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September',  'Oktober', 'November', 'Dezember');
	var englischMonat = new Array("Jan", "Feb", "Mar", "Apr","May", "Jun", "Jul", "Aug", "Sep","Oct", "Nov", "Dec");
	
	for (i = 0; i < englischMonat.length; i++) {
		
		if (englischMonat[i]== englischerMonatAlt){
			
			var monatNeu = deutschMonat[i];
		}
		
	}
	
	// Trenne Kalender Tag von Jahr und Zeit
	neuerQuellText = neuerQuellText.substring(8, posSuchText);
	
	var posjahrUhrzeit   =  neuerQuellText.indexOf(" ");
	var akteullesDatumTag = neuerQuellText.substring(0, posjahrUhrzeit);

	var posaktuellesJahr = neuerQuellText.substring(posjahrUhrzeit, posSuchText);
	
	var neuesDatum = wochentagNeu+", der "+akteullesDatumTag+". "+monatNeu+" "+posaktuellesJahr;
	
	return neuesDatum;
	
}
















var calvis = {};

// URL paths of scripts to be loaded
calvis.baseUrl = 'assets/templates/svwitten23/js/calendar/';
calvis.gdataUrl = calvis.baseUrl + 'gdata.js';
calvis.jqueryUrl = calvis.baseUrl + 'jquery.js';
calvis.coreUrl = calvis.baseUrl + 'calvis-core.js';

/**
 * This method loads all the dependent scripts for Calvis and invoke
 * the callback method when the loading is done.
 * @param {Function} callback The callback method that will be invoked when
 *   loading is completed.
 */  
calvis.ready = function(callback) {

  if (calvis.isTokenRedirect()) {
    // this is a authsub session
    calvis.scriptLoad(calvis.gdataUrl, function() {      
      if (typeof google.gdata.onLoad == 'undefined') {
        if ((/MSIE/).test(navigator.userAgent)) {  
          // manually trigger window load event, in IE, this doesn't work
        } else {
          // manually trigger window load event in non-IE browsers
          var event = document.createEvent('HTMLEvents');
          event.initEvent('load', true, false);
          window.dispatchEvent(event);
        }

      } else {
        google.gdata.onLoad();
      }
      
    });    
  } else {
    // this is a normal loading
    calvis.fixIE();
    if (typeof window.jQuery == 'undefined') {
      calvis.scriptLoad(calvis.jqueryUrl, function() {  
        calvis.scriptLoad(calvis.gdataUrl, function() {
          calvis.scriptLoad(calvis.coreUrl, callback);    
        });          
      });
    } else {
      calvis.scriptLoad(calvis.gdataUrl, function() {

        calvis.scriptLoad(calvis.coreUrl, callback);    
      });           
    }      
  }
};

/**
 * This method dynamically loads a script from an URL via script tag injection
 * @param {string} url The URL of the script to be loaded
 * @param {Function} callback The callback method that will be invoked when
 *   loading is completed.
 */ 
calvis.scriptLoad = function(url, callback) {

  //console.log('loading ' + url);
  var script = document.createElement('script');
  script.src = url;

  var heads = document.getElementsByTagName('head');

  if (heads.length > 0) {
    head = heads[0]; 
    head.appendChild(script);
  } else {
    head = document.createElement('head');    
    head.appendChild(script);
    document.body.parentNode.appendChild(head);
  }

  // most browsers
  script.onload = callback;  
  
  // IE 6 & 7
  script.onreadystatechange = function() {
    if (script.readyState == 'loaded' || script.readyState == 'complete') {
      callback();
      //console.log(url + ' is loaded, state= ' + script.readyState);
    }
  };

};

/**
 * Check to see if this is a authsub token redirect session
 * @return {boolean} True/false to indicate if this is a token redirect session
 */ 
calvis.isTokenRedirect = function() {

  var status = false;
  var url = window.location.href;
  var matchArr = url.match(/#2/);

  if (matchArr != null)
    status = true;

  return status;
};

/**
 * This method fixes IE specific issues
 */ 
calvis.fixIE = function() {
  if (!Array.indexOf) {
    Array.prototype.indexOf = function(arg) {

      var index = -1;
      for (var i = 0; i < this.length; i++){
        var value = this[i];
        if (value == arg) {
          index = i;
          break;
        } 
      }
      return index;
    }
  }

  if (!window.console) {

    window.console = {};
    window.console.log = function(message) {
      var body = document.getElementsByTagName('body')[0];
      var messageDiv = document.createElement('div');
      messageDiv.innerHTML = message;
      body.insertBefore(messageDiv, body.lastChild);
    }
  } 

};