iKnowBase = {
	Version: '@app.version@',
	locations: {
		ikbViewer: "/ikbViewer",
		resource: "/ressurs"
	},
	ensures: {
		facebox: { js: "/ressurs/iknowbase/libs/jquery-plugins/facebox/facebox.js",
			   css: "/ressurs/iknowbase/libs/jquery-plugins/facebox/facebox.css" },
		ikbPopup: { js: [ "/ressurs/iknowbase/libs/jquery-plugins/ikbPopup/ikbPopup.js",
				  "/ressurs/iknowbase/libs/jquery-plugins/jquery.bgiframe.js" ],
			   css: "/ressurs/iknowbase/libs/jquery-plugins/ikbPopup/ikbPopup.css" },
		form: { js: "/ressurs/iknowbase/libs/jquery-plugins/jquery.form.js" }
	}
}

iKnowBase.errorPopup = function(message) {
	jQuery("<div class='ikbErrorPopup' onclick='jQuery(this).slideUp();' />").hide().append(message).prependTo("body").slideDown();
	iKnowBase.log (message);
}

iKnowBase.log = function(message) {
	if (window.console && console.log) console.log (message);
	else if (window.opera && opera.postError) opera.postError(message);
}

iKnowBase.nvl = function(value, alternate)
{
	if (value != null)
		return value;
	else
		return alternate;
}

iKnowBase.assert = function(bool, message)
{
	if (! bool)
		alert ('iKnowBase.assert', message);
}

iKnowBase.setCookie = function (name, value, expires, path, domain, secure)
{
    document.cookie= name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

iKnowBase.getCookie = function (name) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1)
    {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    }
    else
    {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1)
    {
        end = dc.length;
    }
    return unescape(dc.substring(begin + prefix.length, end));
}

iKnowBase.deleteCookie = function (name, path, domain) {
    if (getCookie(name))
    {
        document.cookie = name + "=" + 
            ((path) ? "; path=" + path : "") +
            ((domain) ? "; domain=" + domain : "") +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}

iKnowBase.toggleClassForClass = function (forClass, toggleClass) {
    var elements = document.getElementsByClassName(forClass);
    for (i=0 ; i<elements.length ; i++)
    {
        this.toggleClassForElement('toggle', elements[i], toggleClass);
    }
}

iKnowBase.toggleClassForElement = function (action,o,c1,c2) {
    switch (action) {
        case 'toggle':	
            return this.toggleClassForElement('check',o,c1) 
                 ? this.toggleClassForElement('remove',o,c1) 
                 : this.toggleClassForElement('add',o,c1);
        case 'swap':
            o.className = !this.toggleClassForElement('check',o,c1)
                        ? o.className.replace(c2,c1)
                        : o.className.replace(c1,c2);
            break;
        case 'add':
            if(!this.toggleClassForElement('check',o,c1)){o.className+=o.className?' '+c1:c1;}
            break;
        case 'remove':
            var rep=o.className.match(' '+c1)?' '+c1:c1;
            o.className=o.className.replace(rep,'');
            break;
        case 'check':
            return new RegExp('\\b'+c1+'\\b').test(o.className);
    }

    return o.className != null ? o.className : "";
}

iKnowBase.ensure = function(ensure, callback) {
	jQuery.ensure (ensure, callback);
}

iKnowBase.withFacebox = function(callback) {
	iKnowBase.ensure ( iKnowBase.ensures.facebox, callback);
}

iKnowBase.withIkbPopup = function(callback) {
	iKnowBase.ensure ( iKnowBase.ensures.ikbPopup, callback);
}

iKnowBase.withForm = function(callback) {
	iKnowBase.ensure ( iKnowBase.ensures.form, callback);
}

iKnowBaseDevelopment = {
	Version: '@app.version@'
}

iKnowBaseDevelopment.showPortletCacheStatus = function (name, millis) {
	var cookieName = "ikb.showPortletCacheStatus." + name;
	var cookie = iKnowBase.getCookie(cookieName);

	if (cookie == null)
	{
		style  = "ikbPortletCacheUnknown";
		status = "unknown status";
	}
	else if (cookie == millis)
	{
		style  = "ikbPortletCacheCached";
		status = "from cache";
	}
	else
	{
		style  = "ikbPortletCacheNotCached";
		status = "not from cache";
	}
	
	document.write ("<div class='" + style + "'>");
	document.write ("<!-- ");
	document.write ("name=" + cookieName);
	document.write ("; renderTime=" + millis);
	document.write ("; cookieTime=" + cookie);
        document.write (" -->");
	document.write ("Cache");
	document.write (": delta=" + (millis-cookie));
	document.write ("; " + status);
	document.writeln ("</div>");
	
    iKnowBase.setCookie (cookieName, millis);
}

jQuery(function() {
	jQuery(".ikbComponentInformation .ikbHeader").bind("click", function() {
		jQuery(this).next().toggle();
	});
});
/*
 * iKnowBase Content Services - Content Viewer javascripts
 * Copyright 1999-2006, e-vita as.
 */


/*
 * Create/initialize the main ContentViewer-object
 */

(function() {

    // The main iKnowBase ContentViewer object
    iKnowBase.ContentViewer = {}

    // Local functions
    function getUrl(portlet, ctl, data) {
	if (portlet) {
		data = jQuery.extend({
			_rtarget: portlet,
			_ikbController: ctl,
			portlet: portlet
		}, data || {});
	}

	var url = (portlet
		   ? location.href.match(/[^\?]*/)[0]
		   : iKnowBase.locations.ikbViewer + ctl);

       if (data != null && data != 'undefined') {
              url = url + "?" + jQuery.param(data);
       }


	return url;
    }

    function popup (portlet, controller, params) {
        portlet = null;
	var url = getUrl (portlet, controller, params);
	iKnowBase.log ("Request: " + url);
	iKnowBase.withIkbPopup(function() {
		jQuery.ikbPopup( { post: url });
	});
	return false;
    }

    function navigatePage(clientName,operation,arg) {
        //TODO: var viewer = jQuery(clientName); if (viewer) { ajax } else { post }
	var form = jQuery("<form method='post'>");
	form.append("<input type='hidden' name='ikbAction' value='" + clientName + "' />");
	form.append("<input type='hidden' name='" + clientName + ".operation' value='" + operation + "' />");
	form.append("<input type='hidden' name='" + clientName + ".arg' value='" + arg + "' />");
	form.appendTo("body").submit();
	return false;
    }

    function navigatePortal(clientName,operation,arg) {

	var form = jQuery("<form method='post'>");
	form.append("<input type='hidden' name='" + clientName + ".operation' value='" + operation + "' />");
	if (operation=="startrow" || operation=="sortinfo")
		form.append("<input type='hidden' name='" + clientName + ".arg' value='" + arg + "' />");
	else if (operation=="checkin" || operation=="checkout")
		form.append("<input type='hidden' name='" + clientName + ".document_id' value='" + arg + "' />");
	form.appendTo("body").submit();
	return false;
    }

    // Public functions
    jQuery.extend(iKnowBase.ContentViewer, {

	// Refers to local functions
	getUrl: getUrl,
	navigatePage: navigatePage,
	navigatePortal: navigatePortal,

	deleteDocument: function(docID, version, portlet) {
		return popup (portlet, '/private/document/delete/request', {
			docid: docID,
			version: (version || 0)
		});
	},

	deleteDocumentConfirm: function(docID, version, mode, portlet) {
		return popup (portlet, '/private/document/delete/confirm', {
			docid: docID,
			version: (version || 0),
			mode: mode
		});
	},

	changeDocumentType: function(docid, quickLinkGuid, portlet) {
		return popup (portlet, '/private/document/changeDocumentType/request', {
			docid: docid,
			quickLinkGuid: quickLinkGuid
		});
	},

	changeDocumentTypeConfirm: function(docid, formGuid) {
		return popup (portlet, '/private/document/changeDocumentType/confirm', {
			docid: docid,
			formGuid: formGuid
		});
	},

	copyDocument: function(docid, quickLinkGuid) {
		return popup (portlet, '/private/document/copy/request', {
			docid: docid,
			quickLinkGuid: quickLinkGuid
		});
	},

	copyDocumentConfirm: function(docid, formGuid) {
		return popup (portlet, '/private/document/copy/confirm', {
			docid: docid,
			formGuid: formGuid
		});
	},
        
        selectPersonalAcl: function (portlet, cbFunction, cbClosure) {
                return popup (portlet, '/private/personalAcl/popup', {
                        cbFunction: cbFunction,
                        cbClosure: cbClosure
                });
        }
    });
})();

/*
 * Office AddIn-functions
 */

iKnowBase.ContentViewer.EditOpenOfficeDocument = function(type,URL,mimeType,ikbToken,operation)
{
	if (mimeType == null)
		mimeType = "";

	try
	{
		var filename = ""

		if (type == "INDIRECT")
		{
			var xmlhttp = jQuery.ajax({
				type: "GET",
				async: false,
				url: encodeURI(URL),
				beforeSend: function(xhr) {
					xhr.setRequestHeader("x-iknowbase-getcontent-url", URL);
				}
				});

			if (xmlhttp.status != 200)
			{
				iKnowBase.errorPopup ('XMLHTTPError: ' + xmlhttp.status + "=" + xmlhttp.statusText + " (url=" + URL + ")");
				return;
			}

			URL = xmlhttp.getResponseHeader("x-iknowbase-content-url");
			filename = xmlhttp.getResponseHeader("x-iknowbase-content-filename");

		}
		
		// create the service objects
   		var objServiceManager = new ActiveXObject("com.sun.star.ServiceManager"); 
   		var objCoreReflection= objServiceManager.createInstance("com.sun.star.reflection.CoreReflection"); 
   		var objDesktop = objServiceManager.createInstance("com.sun.star.frame.Desktop"); 

   		// a new document 
   		var args = new Array();
		var objDocument = objDesktop.loadComponentFromURL(URL, "_blank", 0, args); 
	}
	catch	(e)
	{
	   iKnowBase.errorPopup ('Error opening document. Error= ' + e.name + '; description=' + e.message);
	}
}

iKnowBase.ContentViewer.EditMSOfficeDocument = function (type, URL, mimeType, ikbToken, operation)
{
        if (! window.ActiveXObject)
        {
                iKnowBase.errorPopup ('This function requires support for ActiveXObject (typically Microsoft Internet Explorer)');
                return;
        }

	if (mimeType == null)
		mimeType = "";

	try
	{
		var filename = ""

		if (type == "INDIRECT")
		{
			var xmlhttp = jQuery.ajax({
				type: "GET",
				async: false,
				url: encodeURI(URL),
				beforeSend: function(xhr) {
					xhr.setRequestHeader("x-iknowbase-getcontent-url", URL);
				}
				});

			if (xmlhttp.status != 200)
			{
				iKnowBase.errorPopup ('XMLHTTPError: ' + xmlhttp.status + "=" + xmlhttp.statusText + " (url=" + URL + ")");
				return;
			}

			URL = xmlhttp.getResponseHeader("x-iknowbase-content-url");
			filename = xmlhttp.getResponseHeader("x-iknowbase-content-filename");

		}
		
		if (this.ikbCustomEditWindowsDocument)
		{
			var status = ikbCustomEditWindowsDocument ("PREOPEN", null, URL,
					mimeType, filename, operation)
			if (! status)
				return;
		}

		var app = new ActiveXObject ("iKnowBase.RemoteDocument");
		var doc = app.OpenDocument ("", URL, mimeType, ikbToken, filename);

		if (doc)
		{
			if (this.ikbCustomEditWindowsDocument)
			{
				var status = ikbCustomEditWindowsDocument ("POSTOPEN-SUCCESS", doc, URL, 
						mimeType, filename, operation)
				if (! status)
					return;
			}

			// doc contains Office Document Object, eg "Word.Document"
			// Set properties using "ikbOfficeSetProperty (doc, name, value)"
		}
		else
		{
			if (this.ikbCustomEditWindowsDocument)
			{
				var status = ikbCustomEditWindowsDocument ("POSTOPEN-FAILURE", doc, URL, 
						mimeType, filename, operation)
				if (! status)
					return;
			}

			window.open (URL, "_blank");
		}

		app = null;
		doc = null;
	}
	catch	(e)
	{
	   iKnowBase.errorPopup ('Error opening document. Error= ' + e.name + '; description=' + e.message);
	}
}

function openOODoc(type, URL, mimeType, ikbToken, operation) {
	iKnowBase.ContentViewer.EditOpenOfficeDocument(type,URL,mimeType,ikbToken,operation);
}

function ikbEditWindowsDocument (type, URL, mimeType, ikbToken, operation) {
	iKnowBase.ContentViewer.EditMSOfficeDocument(type,URL,mimeType,ikbToken,operation);
}

function ikbOfficeSetProperty (doc, name, value)
{
	try
	{
		doc.CustomDocumentProperties(name).Value = value;
	}
	catch (e)
	{
		doc.CustomDocumentProperties.Add (name, false, 4, value);
	}
}
