﻿/* --- GLOBAL CONSTANTS --- */
var CLIENT_ID = "hitchedmag";

var BASE_URL = "http://web.ipersona.com/";
//var BASE_URL = "http://localhost/iPersona/";

var FEED_URL = "Feed.aspx";
var GUID_URL = "NewGuid.aspx";
var LOG_URL = "HistoryLog.aspx";
var PERSONA_PICKER_URL = "PersonaPicker.aspx";
var ILAYER_URL = "iLayer/"
var THEMES_URL = "Themes/"
var JQUERY = "jquery-1.3.1.js";
var PERSONA_COOKIE = "iPersona";
var PERSONA_ID = null;
var COOKIE_LIFE = 10; //days
var QUERY_STR_PERSON_ID = 'pid';
var QUERY_STR_CONTENT_URL = 'ContentUrl';
var QUERY_STR_CALLBACK = 'jsoncallback';
var PERSONA_PICKER_ID = 'iPersonaPickerParentElement';
var AJAX_LOADER_URL = 'Images/ajax-loader.gif';

var iPersonaServer = {
    config: [],
    /* get, set, and delete cookies */
    getCookie:
    function(name) {
        var start = document.cookie.indexOf(name + "=");
        var len = start + name.length + 1;
        if ((!start) && (name != document.cookie.substring(0, name.length))) {
            return null;
        }
        if (start == -1) return null;
        var end = document.cookie.indexOf(";", len);
        if (end == -1) end = document.cookie.length;
        return unescape(document.cookie.substring(len, end));
    },

    setCookie: function(name, value, expires, path, domain, secure) {
        var today = new Date();
        today.setTime(today.getTime());
        if (expires) {
            expires = expires * 1000 * 60 * 60 * 24;
        }
        var expires_date = new Date(today.getTime() + (expires));
        document.cookie = COOKIE = name + "=" + escape(value) +
		    ((expires) ? ";expires=" + expires_date.toGMTString() : "") + //expires.toGMTString()
		    ((path) ? ";path=" + path : "") +
		    ((domain) ? ";domain=" + domain : "") +
		    ((secure) ? ";secure" : "");
    },

    deleteCookie:
    function(name, path, domain) {
        if (getCookie(name)) document.cookie = name + "=" +
			    ((path) ? ";path=" + path : "") +
			    ((domain) ? ";domain=" + domain : "") +
			    ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
    },

    getFeedRequest:
	function(params) {
	    return BASE_URL + FEED_URL
        + '?parentElementID=' + params.parentElementID
	    + '&theme=' + params.theme
	    + '&template=' + params.template
	    + '&items=' + params.items
	    + '&' + QUERY_STR_CALLBACK + '=?';
	},

    showLoadingIndicator:
	function(parentElement) {
	    $('<img/>').attr('src', BASE_URL + AJAX_LOADER_URL).appendTo(parentElement);
	},

    renderHTML:
	function(data, isSecondInit) {
	    var parentElement = $('#' + data.ParentElementID);
	    if (parentElement) {
	        parentElement.empty();
	        iPersonaServer.templates[data.Template](data);
	        if (!isSecondInit)
	            iPersonaServer.renderPersonaPicker(parentElement);
	    }
	},

    renderPersonaPicker:
	function(prevSiblingElement) {
	    $(document).ready(function() {
	        var button = '<img id="iPersonaPickerImgButton" src="' + BASE_URL + 'images/persona-picker.gif" style="float:right;" />';
	        var picker = '<div id="' + PERSONA_PICKER_ID + '" title="Pick or Create Persona"><iframe width="100%" height="100%" src="' + BASE_URL + PERSONA_PICKER_URL + '" frameborder="0"></iframe></div>';
	        prevSiblingElement.after(button + picker);
	        $("#" + PERSONA_PICKER_ID).dialog({
	            bgiframe: true,
	            height: 500,
	            width: 500,
	            modal: true,
	            autoOpen: false,
	            close: function(event, ui) {

	                iPersonaServer.init(true);
	            }

	        });
	        $('#iPersonaPickerImgButton').click(function() { iPersonaServer.togglePopUp(PERSONA_PICKER_ID); })
	    });
	},

    writeHistoryLog:
	function(url, pid) {
	    //var validUrl = /^https?:/i;
	    //alert('url: ' + url + ' is ok:' + validUrl.test(url));
	    //if (validUrl.test(url)) {
	    var jsonUrl = BASE_URL + LOG_URL + '?' + QUERY_STR_CONTENT_URL + '=' + escape(url) + '&' + QUERY_STR_PERSON_ID + '=' + pid + '&' + QUERY_STR_CALLBACK + '=?';
	    $.getJSON(jsonUrl, function() { window.location.href = url; });
	    $.ajax({
	        type: "GET",
	        dataType: "jsonp",
	        url: BASE_URL + LOG_URL,
	        success: function(msg) {
	            //alert("Data sent successfully: " + this.url);
	        },
	        error: function(xmlHttpRequest, msg) {
	            //alert("Error: " + msg);
	        },
	        complete: function(xmlHttpRequest, msg) {
	            //alert("Data sent: " + msg);
	            window.location.href = url;
	        }
	    });
	    return false;
	    //}
	    //else {
	    //    return true;
	    // }
	},

    attachHistoryLogging:
	function() {
	    $('a').click(
		    function(e) {
		        return iPersonaServer.writeHistoryLog(this.getAttribute('href'), PERSONA_ID);
		    }
		);
	},

    togglePopUp:
	function(popUpID) {
	    $('#' + popUpID).dialog('open');
	},

    templates:
	{
	    'default':
	    function(data) {
	        var parentElement = $('#' + data.ParentElementID);
	        var href = data.PersonaContents[0].ContentUrl;
	        var text = data.PersonaContents[0].ContentTitle;
	        var p = $('<p>').addClass('body');
	        $('<a>').attr('href', href).addClass('body').css('font-weight', 'bold').text(text).appendTo(p);
	        var annotation = $('<div>').html(data.PersonaContents[0].ContentAnnotation + '&nbsp;&nbsp;').addClass('body').appendTo(p);
	        $('<a>').attr('href', href).addClass('body').text('...read more').appendTo(annotation);
	        p.appendTo(parentElement);
	        $.each(data.PersonaContents, function(i, item) {
	            if (i > 0) {
	                var li = $('<li>');
	                $('<a>').addClass('body')
                            .css({'font-weight': 'bold' })
                            .attr('href', item.ContentUrl)
                            .text(item.ContentTitle)
                            .appendTo(li);
	                li.appendTo(parentElement);
	            }
	        });
	    }
	},

    init:
	function(isSecondInit) {


	    for (var i = 0; i < iPersonaServer.config.length; i++) {
	        parentElement = $('#' + iPersonaServer.config[i].parentElementID);
	        if (parentElement) {
	            parentElement.empty();

	            iPersonaServer.showLoadingIndicator(parentElement);
	            $.ajax({
	                type: "GET",
	                dataType: "jsonp",
	                url: iPersonaServer.getFeedRequest(iPersonaServer.config[i]),
	                success: function(data) {


	                    iPersonaServer.renderHTML(data, isSecondInit);
	                    iPersonaServer.attachHistoryLogging();
	                },
	                error: function(xmlHttpRequest, msg) {


	                    iPersonaServer.attachHistoryLogging();
	                }
	            });
	        }
	    }
	}
};

init = function() {
if (document.write) {
        document.write('<style type="text/css">@import url("' + BASE_URL + ILAYER_URL + THEMES_URL + CLIENT_ID + '/ui.all.css");</style>');
        document.write('<script type="text/javascript" src="' + BASE_URL + ILAYER_URL + JQUERY + '"></script>');
        document.write('<script type="text/javascript" src="' + BASE_URL + ILAYER_URL + 'ui.core.js"></script>');
        document.write('<script type="text/javascript" src="' + BASE_URL + ILAYER_URL + 'ui.dialog.js"></script>');
    }
} ();

