//Cookie handler
var calendarCookieProvider;
calendarCookieProvider = new Ext.state.CookieProvider({
    path: "/",
    expires: new Date(new Date().getTime() + (1000 * 60 * 60 * 2)) //at the end of the session
});

var persistentCookieProvider;
persistentCookieProvider = new Ext.state.CookieProvider({
    path: "/",
    expires: new Date(new Date().getTime() + (1000 * 60 * 60 * 24 * 1000)) //expires like never
});

//Global variables
var selectedDate = new Date();
var tags = new Array();
var keywords = new Array();
var categories = new Array();
var categoriesLabels = new Array();
var live = true;
var archived = false;
var offset = 0;
var perPage = 50;
var selectedView = 'list';
var currentRange = 'day';
var currentPage = 1;

//Dates utility functions
function daysInMonth(year, month){
    return 32 - new Date(year, month, 32).getDate();
}

function dayOfWeek(day, month, year){
    var a = Math.floor((14 - month) / 12);
    var y = year - a;
    var m = month + 12 * a - 2;
    var d = (day + y + Math.floor(y / 4) - Math.floor(y / 100) +
    Math.floor(y / 400) +
    Math.floor((31 * m) / 12)) %
    7;
    return d;
}

function isAllDayEvent(event){
    var startDate = event.startDate;
    var endDate = event.endDate;
    if (startDate.format('Y-m-d') != endDate.format('Y-m-d')) 
        return true;
    else 
        if (startDate.getHours() == 0 && startDate.getMinutes() == 0 &&
        endDate.getHours() == 23 &&
        endDate.getMinutes() > 30) 
            return true;
    return false;
}

function isMultiDayEvent(event){
    var startDate = event.startDate;
    var endDate = event.endDate;
    return startDate.format('Y-m-d') != endDate.format('Y-m-d');
}

function isDateInRange(nowDate, startDate, endDate){
    return compareDates(startDate, nowDate) <= 0 &&
    compareDates(endDate, nowDate) >= 0;
}

/**
 Compares to dates no taking in count the time
 */
function isSameDate(date1, date2){
    if (date1 == null || date2 == null) 
        return false;
    return date1.format('Y-m-d') == date2.format('Y-m-d');
}

/**
 Compares to dates no taking in count the time
 returns -1 if date1 < date2, 1 if date1 > date2, 0 if equals
 */
function compareDates(date1, date2){
    var date1Str = date1.format('Ymd');
    var date2Str = date2.format('Ymd');
    if (date1Str > date2Str) 
        return 1;
    else 
        if (date1Str < date2Str) 
            return -1;
        else 
            return 0;
}

/**
 Compares to dates no taking in count the time
 returns -1 if date1 < date2, 1 if date1 > date2, 0 if equals
 */
function compareDateTime(date1, date2){
    var date1Str = date1.format('YmdHis');
    var date2Str = date2.format('YmdHis');
    return parseInt(date1Str) - parseInt(date2Str);
}

function arrayToString(array){
    var arrayStr = '';
    for (var i = 0; i < array.length; i++) {
        arrayStr += array[i];
        if (i < array.length - 1) 
            arrayStr += ",";
    }
    return arrayStr;
}

//Calendar Functions

//Calendar Initialization
function initializeCalendar(dontrefreshview){

    selectedDate = calendarCookieProvider.get("selectedDate", null);
    if (selectedDate == null) 
        selectedDate = persistentCookieProvider.get("selectedDateP", new Date());
    calendarCookieProvider.set("selectedDate", selectedDate);
    
    var tagsSt = calendarCookieProvider.get("tags", null);
    if (tagsSt == null) 
        tagsSt = persistentCookieProvider.get("tagsP", '');
    tags = tagsSt != "" ? tagsSt.split(',') : new Array();
    calendarCookieProvider.set("tags", tagsSt);
    
    var keywordsSt = calendarCookieProvider.get("keywords", null);
    if (keywordsSt == null) 
        keywordsSt = persistentCookieProvider.get("keywordsP", '');
    keywords = keywordsSt != "" ? keywordsSt.split(',') : new Array();
    calendarCookieProvider.set("keywords", keywordsSt);
    
    var categoriesSt = calendarCookieProvider.get("categories", null);
    if (categoriesSt == null) 
        categoriesSt = persistentCookieProvider.get("categoriesP", '');
    categories = categoriesSt != "" ? categoriesSt.split(',') : new Array();
    calendarCookieProvider.set("categories", categoriesSt);
    
    var categoriesLabelsSt = calendarCookieProvider.get("categoriesLabels", null);
    if (categoriesLabelsSt == null) 
        categoriesLabelsSt = persistentCookieProvider.get("categoriesLabelsP", '');
    categoriesLabels = categoriesLabelsSt != "" ? categoriesLabelsSt.split(',') : new Array();
    calendarCookieProvider.set("categoriesLabels", categoriesLabelsSt);
    
    selectedView = calendarCookieProvider.get("selectedView", null);
    if (selectedView == null) 
        selectedView = persistentCookieProvider.get("selectedViewP", 'list');
    calendarCookieProvider.set("selectedView", selectedView);
    
    currentRange = calendarCookieProvider.get('currentRange', null);
    if (currentRange == null) 
        currentRange = persistentCookieProvider.get("currentRangeP", '7days');
    calendarCookieProvider.set("currentRange", currentRange);
    
    currentPage = calendarCookieProvider.get('currentPage', '1');
    calendarCookieProvider.set("currentPage", currentPage);

    initializeNavCalendar();
    
    if (!dontrefreshview) 
        refreshCalendarView();
    
    initializeFilters();
    
    Ext.get(document).on("keyup", checkEscapeKey);
    
    Ext.get(document).on("click", hideCalendarPopups);
}

//Set search criteria as default
function saveDefaultFilter(){

    persistentCookieProvider.set("selectedDateP", selectedDate);
    persistentCookieProvider.set("tagsP", tags);
    var keywordsSt = "";
    for (var i = 0; i < keywords.length; i++) {
        if (i > 0) 
            keywordsSt += ",";
        keywordsSt = keywords[i];
    }
    persistentCookieProvider.set("keywordsP", keywordsSt);
    var categoriesSt = "";
    for (var i = 0; i < categories.length; i++) {
        if (i > 0) 
            categoriesSt += ",";
        categoriesSt = categories[i];
    }
    persistentCookieProvider.set("categoriesP", categoriesSt);
    var categoriesLabelsSt = "";
    for (var i = 0; i < categoriesLabels.length; i++) {
        if (i > 0) 
            categoriesLabelsSt += ",";
        categoriesLabelsSt = categoriesLabels[i];
    }
    persistentCookieProvider.set("categoriesLabelsP", categoriesLabelsSt);
    persistentCookieProvider.set("selectedViewP", selectedView);
    persistentCookieProvider.set("currentRangeP", currentRange);
    
}

//Change between weekly/monthly/list view
function changeCalendarView(newView){

    if (newView == selectedView) 
        return;
    
    calendarCookieProvider.set("selectedView", newView);
    selectedView = newView;
    
    refreshCalendarView();
}

//Change to list view within the selected list range	
function selectListViewRange (newRange) {
	$('listDrop').hide();
	if(newRange == '7days' || newRange == '365days') {
		selectedDate = new Date();
		calendarCookieProvider.set('selectedDate', selectedDate);
	}
	currentRange = newRange;
	calendarCookieProvider.set('currentRange', newRange);

	currentPage = 1;
	calendarCookieProvider.set("currentPage", 1);

	if(selectedView != 'list')
		changeCalendarView('list');
	else
		refreshCalendarView();
	renderFilters();
	renderNavCalendar();

}	

//Refreshes the calendar in the actual selected view
function refreshCalendarView(){

    hideEventDetail();
    hideCalendarViews();
    
    selectedView = calendarCookieProvider.get("selectedView", null);
    
    if (selectedView == 'list') {
        $('listViewBtn').className = 'dayOn';
        $('weeklyViewBtn').className = 'weekOff';
        $('monthlyViewBtn').className = 'monthOff';
        initializeListCalendar();
    }
    else 
        if (selectedView == 'weekly') {
            $('listViewBtn').className = 'dayOff';
            $('weeklyViewBtn').className = 'weekOn';
            $('monthlyViewBtn').className = 'monthOff';
            initializeWeeklyCalendar();
        }
	else 
            if (selectedView == 'monthly') {
                $('listViewBtn').className = 'dayOff';
                $('weeklyViewBtn').className = 'weekOff';
                $('monthlyViewBtn').className = 'monthOn';
                initializeMonthlyCalendar();
            }
       	    else 
                if (selectedView == 'iframe') {
                    $('listViewBtn').className = 'dayOff';
                    $('weeklyViewBtn').className = 'weekOff';
                    $('monthlyViewBtn').className = 'monthOff';
		    iframeSrc = calendarCookieProvider.get("iframeSrc", null);
                    showIFrame(iframeSrc);
                }
    
}

function showLoadingCalendar(){
    $('loadingView').show();
}

function hideLoadingCalendar(){
    $('loadingView').hide();
}

function hideCalendarViews(){
    $('weeklyView').hide();
    $('monthlyView').hide();
    $('listView').hide();
    $('eventDetailWrapper').hide();
    $('innerIFrameWrapper').hide();
    hideCalendarPopups();
}

function hideCalendarPopups (jsevent) {
    if(jsevent == null || !jsevent.within(Ext.get('eventDetail'))) {
	    $('eventDetail').hide();
    }
    $('listDrop').hide();
    closeFiltersBox();	
}


//Categories, keywords and tags filters functions

function initializeFilters(){

    var keywordBox = $("keywordBox");
    keywordBox.observe("keypress", keywordsCheckEnter);
    keywordBox.observe("keyup", keywordsCheckKeys);
    
    var moreOptionsButton = Ext.get("moreOptionsButton");
    moreOptionsButton.on("click", showFiltersBox, null, { delay: 100 });
    
    
}

//Loads the filter box using the keyword filled and showing a maximum of N categories 
filterBoxPositioned = false;

function showFiltersBox(){

    var keyword = $('keywordBox').value;
    
    //Cleaning all the old categories before repulling them
    $('categoriesFilterBox').update('<h3>Calendars: (Show All)</h3><br/>Loading...');
    showAllCategories = false;
    StructureAjax.getCategoriesTree('Event', "(?i).*" + keyword + ".*", loadCategoriesFilterCallback);
    
    
    var strhtml = '<a href="javascript: closeFiltersBox();" style="float:right; text-decoration:none;">' +
    '		<img src="/calendar/images/btn_close.gif" alt="Close"/>' +
    '</a>' +
    '<h3>Filters:</h3><br/>Loading...';
    $('tagsFilterBox').update(strhtml);
    if (keyword == '') 
        TagAjax.getAllTags(loadTagsFilterCallback);
    else 
        TagAjax.getSuggestedTag(keyword, loadTagsFilterCallback);
    
    $('filterBox').show({
        duration: .4
    });
}

function hideFiltersBox(){
    closeFiltersBox();
}

function closeFiltersBox(){
    var filtersBox = $('filterBox');
    filtersBox.hide({
        duration: .4
    });
}

//Keyword filtering functions

function addKeyword(){
    if ($('keywordBox').value != '') {
        addKeywordFilter($('keywordBox').value);
        $('keywordBox').value = '';
    }
}

function keywordsCheckEnter(event){
    if (event.keyCode == 13) {
        addKeyword();
    }
}

function keywordsCheckKeys(event){
    if ($('keywordBox').value.length == 0) {
        hideFiltersBox();
    }
    else 
        if ($('keywordBox').value.length >= 3 || event.keyCode == 8) {
            showFiltersBox();
        }
}

function addKeywordFilter(keyword){
    if (keywords.indexOf(keyword) < 0) {
        keyword = keyword.replace(/"/g, "");
	keywords = new Array();
        keywords.push(keyword);
        calendarCookieProvider.set("keywords", arrayToString(keywords));
	selectListViewRange('365days');
    }
}

function removeKeywordFilter(keyword){
    if (keywords.indexOf(keyword) >= 0) {
        keywords.remove(keyword);
        calendarCookieProvider.set("keywords", arrayToString(keywords));
        renderFilters();
        refreshCalendarView();
    }
}

//Category filter functions

//Same as the last function but loads all the categories 
function loadAllCategoriesFiltersBox(){
    var keyword = $('keywordBox').value;
    
    //Cleaning all the old categories before repulling them
    $('categoriesFilterBox').update('Loading...');
    showAllCategories = true;
    StructureAjax.getCategoriesTree('Event', "(?i).*" + keyword + ".*", loadCategoriesFilterCallback);
    $('filterBox').show({
        duration: .4
    });
}

var showAllCategories = false;
function loadCategoriesFilterCallback(data){

    var keyword = $('keywordBox').value;
    
    var lastLevel = 0;


    var currentLevel = 0;
    var secondLevelCount = 0;
    var showAllShowed = false;
    var strHTML = '';
    for (var i = 0; i < data.length; i++) {
        var cat = data[i];
        currentLevel = cat.categoryLevel;
        if (lastLevel > currentLevel) 
            strHTML += '</ul>';
        if (currentLevel > lastLevel) {
            strHTML += '<ul>';
        }
        if (currentLevel == 0) {
            secondLevelCount = 0;
            showAllShowed = false;
            strHTML += '<h3>' + cat.categoryOrigName + ':'
            if (countLevelCategories(data, i + 1, 1) > 10 && !showAllCategories) 
                strHTML += '<br/>(<a href="javascript: loadAllCategoriesFiltersBox(' + cat.inode + ')">Show All</a>)' +
                '</h3>';
            else 
                strHTML += '</h3>';
            
            if (countLevelCategories(data, i + 1, 1) == 0) 
                strHTML += '<ul><li>No Match Found</li></ul>';
            
        }
        else 
            if (currentLevel > 0) {
                secondLevelCount++;
                if (showAllCategories || secondLevelCount <= 10) {
                
                    var catClass = "";
                    if (keyword != "" && cat.categoryOrigName.toLowerCase().indexOf(keyword.toLowerCase()) > -1) 
                        catClass = "category_higlighted";
                    
                    strHTML += '<li>' +
                    '	<a href="javascript: addCategoryFilter(' +
                    cat.inode +
                    ', \'' +
                    javascriptfyVar(cat.categoryOrigName) +
                    '\')">' +
                    cat.categoryOrigName +
                    '</a>' +
                    '</li>';
                }
                else 
                    if (!showAllCategories && secondLevelCount > 10 && !showAllShowed) {
                        strHTML += '<li><a href="javascript: loadAllCategoriesFiltersBox(' + cat.inode + ')" class="red">... Show All</a></li>';
                        showAllShowed = true;
                    }
            }
        lastLevel = currentLevel;
    }
    strHTML += '</ul>';
    $('categoriesFilterBox').update(strHTML);
}

function countLevelCategories(data, startIndex, level){
    var count = 0;
    for (var i = startIndex; i < data.length; i++) {
        var cat = data[i];
        if (cat.categoryLevel != level) 
            break;
        count++;
    }
    return count;
}

function addCategoryFilter(catInode, catLabel){
    $('keywordBox').value = '';
    if (categories.indexOf(catInode) < 0) {
        categories.push(catInode);
        categoriesLabels.push(catLabel);
        calendarCookieProvider.set("categories", arrayToString(categories));
        calendarCookieProvider.set("categoriesLabels", arrayToString(categoriesLabels));
        renderFilters();
        refreshCalendarView();
    }
    closeEventDetail();
    closeFiltersBox();
}

function removeCategoryFilter(catInode){
    if (categories.indexOf(catInode) >= 0) {
        categoriesLabels.remove(categoriesLabels[categories.indexOf(catInode)]);
        categories.remove(catInode);
        calendarCookieProvider.set("categories", arrayToString(categories));
        calendarCookieProvider.set("categoriesLabels", arrayToString(categoriesLabels));
        renderFilters();
        refreshCalendarView();
    }
}

//Tags filter functions
function loadTagsFilterCallback(data){
    var keyword = $('keywordBox').value;
    var strHTML = '<a href="javascript: closeFiltersBox();" style="float:right;">' +
    '		<img src="/calendar/images/btn_close.gif" alt="Close"/>' +
    '</a>' +
    '<h3>Filters:</h3><ul>';
    for (var i = 0; i < data.length; i++) {
        var tag = data[i];
        if (tag.tagName == '') 
            continue;
        
        var tagClass = "";
        if (keyword != "" && tag.tagName.toLowerCase().indexOf(keyword.toLowerCase()) > -1) 
            tagClass = "tag_higlighted";
        
        if (i < 50) {
            var tagEscaped = javascriptfyVar(tag.tagName);
            strHTML += '<li>' +
            '	<a class="' +
            tagClass +
            '" href="javascript: addTagFilter(\'' +
            tagEscaped +
            '\')">' +
            tag.tagName +
            '</a>' +
            '</li>';
        }
        else {
            strHTML += '<div class="tagFilterLink">...</div>';
            break;
        }
    }
    if (data.length == 0) 
        strHTML += '<li>No filters found</li>';
    strHTML += '</ul>';
    $('tagsFilterBox').update(strHTML);
}


function addTagFilter(tag){
    $('keywordBox').value = '';
    if (tags.indexOf(tag) < 0) {
        tags.push(tag);
        calendarCookieProvider.set("tags", arrayToString(tags));
        renderFilters();
        refreshCalendarView();
    }
    closeFiltersBox();
    closeEventDetail();
}


function removeTagFilter(tag){
    if (tags.indexOf(tag) >= 0) {
        tags.remove(tag);
        calendarCookieProvider.set("tags", arrayToString(tags));
        renderFilters();
        refreshCalendarView();
    }
}

//Calendar Navigation buttons
function setTodayView(){
    var refresh = false;
    if (!isSameDate(selectedDate, new Date())) {
        selectedDate = new Date();
        calendarCookieProvider.set("selectedDate", selectedDate);
        refresh = true;
    }
    
    /*if (currentRange != 'day') {
        currentRange = 'day';
        calendarCookieProvider.set('currentRange', 'day');
        refresh = true;
    }*/
    
    /*if (selectedView != 'list') 
        changeCalendarView('list');
    else 
        if (refresh) */
            refreshCalendarView();
    
}

function setDayView(year, month, day){
    var newDate = new Date();
    newDate.setYear(year);
    newDate.setMonth(month);
    newDate.setDate(day);
    var refresh = false;
    if (!isSameDate(selectedDate, newDate)) {
        selectedDate = newDate;
        calendarCookieProvider.set("selectedDate", selectedDate);
        refresh = true;
    }
    
    if (currentRange != 'day') {
        currentRange = 'day';
        calendarCookieProvider.set('currentRange', 'day');
        refresh = true;
    }
    
    if (selectedView != 'list') 
        changeCalendarView('list');
    else 
        if (refresh) 
            refreshCalendarView();
    
}

function nextNavMonth(){

    var days = daysInMonth(selectedDate.getFullYear(), selectedDate.getMonth() + 1);
    var day = selectedDate.getDate() > days ? days : selectedDate.getDate();
    selectedDate = new Date(selectedDate.getFullYear(), selectedDate.getMonth() + 1, day);
    calendarCookieProvider.set("selectedDate", selectedDate);
    
    renderNavCalendar();
    refreshCalendarView();
}

function previousNavMonth(){

    var days = daysInMonth(selectedDate.getFullYear(), selectedDate.getMonth() - 1);
    var day = selectedDate.getDate() > days ? days : selectedDate.getDate();
    selectedDate = new Date(selectedDate.getFullYear(), selectedDate.getMonth() - 1, day);
    calendarCookieProvider.set("selectedDate", selectedDate);
    
    renderNavCalendar();
    refreshCalendarView();
}

//Event detail popup functions
var eventsList = new Array();

function checkEscapeKey(jsevent){
    if (jsevent.keyCode == 27) {
        hideEventDetail();
        hideFiltersBox();
    }
}

var currentEvent;

function showEventDetail(jsevent, event){

    currentEvent = event;
    
    var doc = Ext.get(document.body);
    var detailDiv = Ext.get("eventDetail");
    
    Element.update($("eventDetailTitle"), '<a href="javascript: goToEventDetailPage()">' + event.title + '</a>');
    
    var eventDates = '';
    if (isSameDate(event.startDate, event.endDate)) {
        var startTime = event.startDate.format('h:i A');
        var endTime = event.endDate.format('h:i A');
        if (startTime != endTime) {
            if (!isAllDayEvent(event)) 
                eventDates = event.startDate.format('m/d/Y h:i A') + ' - ' + event.endDate.format('h:i A');
            else 
                eventDates = event.startDate.format('m/d/Y');
        }
        else {
            eventDates = event.startDate.format('m/d/Y h:i A');
        }
    }
    else {
        eventDates = event.startDate.format('m/d/Y') + ' - ' + event.endDate.format('m/d/Y');
    }
    Element.update($("eventDetailDate"), eventDates);
    Element.update($("eventDetailDescription"), event.description);
    
    //Showing location if set
    var locationHolder = $("eventDetailLocation");
    if (event.location != "") {
        var strHTML = '<strong>Location:</strong><br/>';
        strHTML += '<p class="locationWrap">';
        strHTML += event.location + '</p>';
        strHTML += '<a style="margin: 0px 0px 0px 30px;" class="btn" href="javascript: showMap()"><span>Map</span></a>';
        strHTML += '<div class="clear"/>';
        strHTML += '<hr/>';
        Element.update(locationHolder, strHTML);
    }
    else {
        Element.update(locationHolder, '');
    }
    
    //Categories
    var categoriesHolder = $('eventDetailCategories');
    if (event.categories.length > 0) {
        var strHTML = '<strong>Calendars:</strong> ';
        for (var x = 0; x < event.categories.length; x++) {
            var category = event.categories[x];
            if (x > 0) 
                strHTML += ', ';
            strHTML += '<a href="javascript: addCategoryFilter(' + category.inode + ', \'' + javascriptfyVar(category.categoryName) + '\');">' + category.categoryName + '</a>'
        }
        Element.update(categoriesHolder, strHTML);
    }
    else {
        Element.update(categoriesHolder, '');
    }
    
    //Showing other event elements
    var strHTML = '';
    
    if (event.allowRating == "yes") {
        strHTML += 'Average Rating: <img alt="Rating Here" src="/calendar/images/test_rating.gif"/>' + event.votes + ' votes <br/>';
    }
    if (event.allowComments == "yes") {
        strHTML += event.commentsCount + ' Comments | <a href="javascript: goToEventDetailPage()">View Comments</a><br/>';
    }
    if (event.tags != '') {
        var tags = event.tags.split(',');
        strHTML += "Filter by: ";
        for (var x = 0; x < tags.length; x++) {
            var tag = tags[x];
            if (x > 0) 
                strHTML += ',   ';
            strHTML += '<a href="javascript: addTagFilter(\'' + javascriptfyVar(tag) + '\')">' + tag + '</a>';
        }
    }
    Element.update('eventDetailOthers', strHTML == '' ? '' : strHTML);
    
    if(event.publishPermission || event.hasPublishPermission) {
       	$('deleteEventLink').style.display = "";
    } else {
       	$('deleteEventLink').style.display = "none";
    }

    //Positioning and showing the event detail bubble
    var eventDetailObj = Ext.get('eventDetail');
    var bodyWidth = Ext.getBody().getWidth();
    
    var posX = 0;
    var cssClass = 'left';
    if (jsevent.getPageX() < (bodyWidth / 2)) 
        posX = jsevent.getPageX() + 46;
    else {
        posX = jsevent.getPageX() - 434;
        cssClass = 'right';
    }
    var posY = jsevent.getPageY() - 60;
    
    new Effect.Move($("eventDetail"), {
        x: posX,
        y: posY,
        mode: 'absolute',
        duration: 0
    });
    
    $("eventDetail").className = 'detailBubble';
    $("eventDetail").addClassName(cssClass);
    
    $("eventDetail").show({
        duration: .4
    });
    
}

function hideEventDetail(){
    closeEventDetail();
}

function closeEventDetail(){
    $('eventDetail').hide({
        duration: .7
    });
}

function showEventDetailView(){
    hideCalendarViews();
    $("eventDetailWrapper").show({
        duration: .4
    });
    selectedView = 'detail';
}

//Event actions functions
function goToEventDetailPage(){
    backbuttonPressed = false;
    window.location = '/calendar/index.dot?id=' + currentEvent.identifier;
}

function deleteEvent() {
    if(confirm("Are you sure that you want to delete this event?"))
       CalendarAjax.deleteEvent(currentEvent.identifier, deleteEventCallback);
}

function deleteEventCallback () {
    refreshCalendarView();
}

var locationName = '';
var mapAddress = '';

function showMap(){
    var currentValue = currentEvent.location;
    if (currentValue.indexOf("@") > -1) {
        var arr = currentValue.split("@");
        if (arr.length == 2) {
            address = arr[1];
            locationName = arr[0] + "<br/>" + arr[1];
        }
    }
    else 
        if (currentValue.length > 0) {
            address = currentValue;
            locationName = currentValue;
        }
    mapAddress = address;
    
    var url = 'http://maps.google.com/maps?f=q&hl=en&geocode=&sll=37.0625,-95.677068&sspn=50.244827,82.265625&ie=UTF8&z=17&iwloc=addr&om=0&q=' + address;
    window.open(url);
}

function addEvent() {
	if(typeof(selectedDate) == "undefined")
      		var selectedDate = new Date();
  	var startDate = (selectedDate.getMonth() + 1) + '/' + selectedDate.getDate() + '/' + selectedDate.getFullYear();
  	var endDate = (selectedDate.getMonth() + 1) + '/' + selectedDate.getDate() + '/' + selectedDate.getFullYear();
  	window.location = '/calendar/add_event.dot?startDateDate=' + startDate + 
   		'&startDateTime=00:00:00&endDateDate=' + endDate + '&endDateTime=00:00:00';
 }

//RSS		
function getCalendarRSS(){
    window.open('/calendar/calendar_rss.dot?keywords=' +
    keywords +
    '&categories=' +
    categories +
    '&categoriesLabels=' +
    categoriesLabels +
    '&tags=' +
    tags);
}

//Inner Iframes Control
function onIFrameLoad(){

    var id = 'innerIFrame';
    var newheight;
    var newwidth;
    
    if (document.getElementById) {
        newheight = document.getElementById(id).contentWindow.document.body.scrollHeight;
        newwidth = document.getElementById(id).contentWindow.document.body.scrollWidth;
    }
    
    document.getElementById(id).height = (newheight) + "px";
    //document.getElementById(id).width = (newwidth) + "px";

}

function showIFrame(url){

    calendarCookieProvider.set("iframeSrc", url);
    calendarCookieProvider.set("selectedView", "iframe");

    hideCalendarViews();
    selectedView = 'detail';
    $('innerIFrame').src = url;
    //onIFrameLoad();
    $('innerIFrameWrapper').show();
}

//Utility Functions
function isNumberKey(evt){
    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57)) 
        return false;
    
    return true;
}

function javascriptfyVar(variable){
    return variable.replace(/'/g, '\\\'').replace(/"/g, '');
}
