﻿function Link(jsonLinkString)
{
    var linkItem = JSON.parse(jsonLinkString);
    this.LinkUrl = linkItem.LinkUrl;
    this.LinkDisplayName = linkItem.LinkDisplayName;
    this.IconUrl = linkItem.IconUrl;
}
function Media(jsonMediaString)
{
    var MediaItem = JSON.parse(jsonLinkString);
    //this.Description = MediaItem.Description;
    this.Link = new Link(MediaItem.Link);
    this.PubDate = MediaItem.PubDate;
    this.Title = MediaItem.Title;
}

function Core()
{
    this.Services = new Array("/Service/MenuService.asmx", "/Service/MediaService.asmx");
    //this.IsHtml5 = false;
}
Core.prototype.FLASH = "flash";
Core.prototype.WEB = "web";
Core.prototype.DEFAULT_DATA = "{}";
Core.prototype.POST_METHOD = "POST";
Core.prototype.GET_METHOD = "GET";
Core.prototype.CONTENT_TYPE_JSON = "application/json; charset=utf-8";
Core.prototype.IsHtml5 = false;
Core.prototype.createUiTypeData = function(uiType)
{
    if (uiType == Core.prototype.FLASH || uiType == Core.prototype.WEB)
        return "{'uiType':'" + uiType + "'}";
}
Core.prototype.getJournalMenuSimple = function(result)
{
    var rest = Core.prototype.parseRestUrl();
    var theStr = (rest.length > 2) ? rest[2] : "";
    for (var i in result) {
        var linkItem = new Link(result[i]);
        var matchFound = String(linkItem.LinkUrl).match(theStr);
        var option = "<option value='" + linkItem.LinkUrl + "' " + (matchFound ? "SELECTED" : "") + " >" + linkItem.LinkDisplayName + "</option>";
        $("select[id=blogChoices]").append(option);
    }

    $("select[id=blogChoices]").change(function()
    {
        window.location.href = $("select[id=blogChoices]").val();
    });
}
Core.prototype.getJournalMenu = function(result)
{
    var rest = Core.prototype.parseRestUrl();
    var theStr = (rest.length > 2) ? rest[2] : "";
    for (var i in result) {
        var mediaItem = new Media(result[i]);
        var matchFound = String(mediaItem.Link.LinkUrl).match(theStr);
        var option = "<option value='" + mediaItem.Link.LinkUrl + "' " + (matchFound ? "SELECTED" : "") + " >" + mediaItem.Link.LinkDisplayName + "</option>";
        $("select[id=blogChoices]").append(option);
    }

    $("select[id=blogChoices]").change(function()
    {
        window.location.href = $("select[id=blogChoices]").val();
    });
}
Core.prototype.getNavMenu = function(result)
{
    for (var i in result) {
        var linkItem = new Link(result[i]);
        $("ul[id=menuNav]").append("<li><a href='" + linkItem.LinkUrl + "'>" + linkItem.LinkDisplayName + "</a></li>");
    }
}
Core.prototype.getPictureLocationsMenu = function(result)
{
    var rest = Core.prototype.parseRestUrl();
    var theStr = (rest.length > 2) ? rest[2] : "";
    for (var i in result) {
        var linkItem = new Link(result[i]);
        var matchFound = String(linkItem.LinkUrl).match(theStr);
        $("select[id=folderChoices]").append("<option value='" + linkItem.LinkUrl + "' " + (matchFound ? "SELECTED" : "") + " >" + linkItem.LinkDisplayName + "</option>");
    }
}
Core.prototype.getMediaLinkDescription = function()
{
    var rest = Core.prototype.parseRestUrl();
    return (rest.length > 2) ? rest[2] : null;
}
Core.prototype.getPicturesViaScreenSize = function(result)
{
    for (var i in result) {
        var linkItem = new Link(result[i]);
        $("div[id=picContainer]").append("<a href='" + linkItem.LinkUrl + "'><img src='" + linkItem.IconUrl + "' /></a>");
    }
}
Core.prototype.parseRestUrl = function()
{
    var regexp = new RegExp(/http:\/\/[A-Za-z0-9\.-]{3,}\.[A-Za-z]{3}/);
    //NOTE: remove the 2nd replace
    var url = document.URL.replace(regexp, ""); 
    //alert("url:" + url);
    if (url.indexOf("/", 0) == 0) url = url.substr(1, url.length - 1);
    //alert("url:" + url);
    var restSet = url.split("/");
    return restSet;
}
Core.prototype.convertStringToObject = function(ary)
{
    var object = "{'controller':'[0]','action:'[1]','id':'[2]'}";
    for (var i = 0; i < ary.length; i++) {
        var str = "[" + i + "]";
        object.replace(str, ary[i]);
    }

    object.replace("[2]", "");
}
Core.prototype.createRestObject = function()
{
    return Core.prototype.convertStringToObject(Core.prototype.parseRestUrl());
}
Core.prototype.callService = function(urlPath, theData, successFunction)
{
    if (theData == null)
        theData = Core.prototype.DEFAULT_DATA;
    $.ajax({
        type: Core.prototype.POST_METHOD,
        url: urlPath,
        data: theData,
        contentType: Core.prototype.CONTENT_TYPE_JSON,
        dataType: "json",
        processData: false,
        success: function(msg)
        {
            if (successFunction != null) {
                var jObj = msg.d;
                var newJSON = JSON.parse(jObj);
                successFunction(newJSON);
            }
        },
        error: function(xhr, status, theData)
        {
            Core.prototype.failureCall(xhr, status, theData, urlPath);
        }
    });
}
Core.prototype.failureCall = function(xhr, status, theData, url)
{
    alert("call failed while attempting: " + url + " " + status + " " + theData);
}
Core.prototype.pathCombine = function(path1, path2)
{
    var p1Str = path1.toString();
    var p2Str = path2.toString();
    var p1Length = p1Str.length;
    var p2Length = p2Str.length;

    var p1Match = false;
    var p2Match = false;
    if (p1Str.charAt(p1Length - 1) == '/') p1Match = true;
    if (p2Str.charAt(0) == '/') p2Match = true;

    if (p1Match) {
        if (p2Match) return p1Str.substring(0, p2Length - 1) + p2Str;
        else return p1Str + p2Str;
    }
    else {
        if (p2Match) return p1Str + p2Str;
        else return p1Str + '/' + p2Str;
    }
}
