﻿//Javascipt

// finds the highest possible non-frameset window to apply the lightbox to
function findLightboxWindow()
{
	var objWin = window;
	try
	{
		while (objWin.parent != objWin && objWin.parent.location.href != "somethingjusttocauseaccessdenied" && objWin.parent.document.getElementsByTagName("FRAMESET").length == 0)
			objWin = objWin.parent;
	}
	catch (e) { /* done */ }

	return objWin;
}

//Returns a list of images build from the ImageAlbum.images to use in jQuery.slimBox(imagesList,currenImage,customoptions)
function getSlimBoxImagelistFromAlbum(objImageAlbum, intImageWidth, intImageHeight, strCounterTextTemplate ,appPath)
{
    if (appPath && (!/\/$/.test(appPath)) )   //Check for trailing /      
        appPath = appPath + '/';           
    else    
        appPath = '';    
    if (!intImageWidth)
        intImageWidth = parseInt(getWindowWidth() - 80);
    if (!intImageHeight)
        intHeightintImageHeight = parseInt(getWindowHeight() - 160);
    
    //rebuild image list for lightbox
    var objList = new Array();    
    var strImageBaseUrl = appPath + 'ShowPhoto.aspx?ID=' + objImageAlbum.instanceId + '|' + objImageAlbum.albumId + '|'; //+objImage.filename;
    var strCounterText = strCounterTextTemplate.replace('{y}', objImageAlbum.images.length);
    for (var i = 0; i < objImageAlbum.images.length; i++)
    {
        objList[i] = [strImageBaseUrl + objImageAlbum.images[i].imageId + "|" + objImageAlbum.images[i].filename.substring(objImageAlbum.images[i].filename.lastIndexOf(".")),
                       getTitleHtml(objImageAlbum.images[i], strCounterText.replace('{x}', i+1))
                     + getDescriptionHtml(objImageAlbum.images[i])
                     + getHyperLinkHtml(objImageAlbum.images[i], objImageAlbum.LANGUAGE.MOREINFORMATION, appPath)
                      ];
    }
    return objList;
}

function getHyperLinkHtml(objImage, strLinkText , appPath)
{
	if (objImage.link && objImage.link.id)
	{
		var intPos = window.location.pathname.lastIndexOf("/");
		strPath = window.location.pathname.substring(0, intPos) + "/../../";
		return '<a href="#" onclick="window.slideshowOrigin.openLink(\'' + strPath + 'site/loader/loader.aspx?hyperlinkid=' + objImage.link.id + '\', \'' + objImage.link.target + '\'); return false;">' + strLinkText + '</a>' || "";
	}
	else
		return "";
}

function openLink(strURL, strTarget)
{
	window.open(strURL, strTarget);
}

function getTitleHtml(objImage, strCounterText)
{
    if (objImage.title)
        return '<div class="title">' + strCounterText + ' - ' + objImage.title + '</div>';
    else
        return '<div class="title">' + strCounterText+ '</div>'; ;
}
function getDescriptionHtml(objImage)
{
    if (objImage.description)
        return '<div class="description">' + objImage.description + '</div>' || "";
    else
        return "";
}


// Parses de xmlString to a xml object
function parseXmlString(xmlString)
{
    var xmlDoc;

    if (window.DOMParser)
    {
        parser = new DOMParser();
        xmlDoc = parser.parseFromString(xmlString, "text/xml");
    }
    else // Internet Explorer
    {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(xmlString);
    }

    return xmlDoc;
}



function getXmlNodeValue(xmlNode)
{
    if (xmlNode)
    {
        var text = xmlNode.innerText || xmlNode.text || xmlNode.textContent || "";
        if (text.indexOf("<![CDATA[") == 0)
        {
            text = text.substring(9, text.length - 3);
        }
        if (text == "undefined")
            text = "";
        
        return text;
    }
    return "";
}

function setHoverEvents(element)
{
    AddEventHandler(element, 'mouseover', function() { addCssClass(element,'hover'); });
    AddEventHandler(element, 'mouseout', function () { removeCssClass(element, 'hover'); });
}


/* From Skinbase - Base.js */
function AddEventHandler(objElement, strEvent, objExpression, blnCaptureEvent)
{
    blnCaptureEvent = blnCaptureEvent || false;

    RemoveEventHandler(objElement, strEvent, objExpression, blnCaptureEvent);

    if (window.addEventListener)
        objElement.addEventListener(strEvent, objExpression, blnCaptureEvent);
    else
        objElement.attachEvent('on' + strEvent, objExpression);
}

function RemoveEventHandler(objElement, strEvent, objExpression, blnCaptureEvent)
{
    if (window.removeEventListener)
        objElement.removeEventListener(strEvent, objExpression, blnCaptureEvent);
    else
        objElement.detachEvent('on' + strEvent, objExpression);
}

function addCssClass(objElement, strCssClass)
{
    var objRegExp = new RegExp('^' + strCssClass + '| ' + strCssClass);

    if (!objElement.className.match(objRegExp))
        objElement.className += ' ' + strCssClass;
    else if (!objElement.className)
        objElement.className = strCssClass;
}

function removeCssClass(objElement, strCssClass)
{
    var objRegExp = new RegExp('^' + strCssClass + ' |^' + strCssClass + '| ' + strCssClass);

    if (objElement.className)
        objElement.className = objElement.className.replace(objRegExp, '');
}


function getWindowWidth()
{
    if (document.documentElement && document.compatMode != 'BackCompat')
        return document.documentElement.clientWidth;
    else if (document.body)
        return document.body.clientWidth;
    else
        return window.innerWidth;
}

function getWindowHeight()
{
    if (document.documentElement && document.compatMode != 'BackCompat')
        return document.documentElement.clientHeight;
    else if (document.body)
        return document.body.clientHeight;
    else
        return window.innerHeight;
}



this.Ajax = new function ()
{
    this.loadXmlDoc = function (strXml)
    {
        var objXmlDoc = null;

        if (!window.DOMParser)
        {
            // IE
            objXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            objXmlDoc.async = false;
            objXmlDoc.loadXML(strXml);
        }
        else
        {
            // w3c compliant browsers
            var objParser = new DOMParser();
            objXmlDoc = objParser.parseFromString(strXml, "text/xml");
        }

        return objXmlDoc;
    }

    this.selectSingleNode = function (objXmlDoc, strXPath)
    {
        var objNodes = null;

        if (window.ActiveXObject)
        {
            objXmlDoc.setProperty("SelectionLanguage", "XPath");
            return objXmlDoc.selectSingleNode(strXPath);
        }
        else
        {
            objNodes = objXmlDoc.evaluate(strXPath, objXmlDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);

            if (objNodes && objNodes.singleNodeValue)
                return objNodes.singleNodeValue;
            else
                return null;
        }
    }

    this.selectNodes = function (objXmlDoc, strXPath)
    {
        var objNodes = null;
        var arrNodes = new Array();
        var intIndex = 0;

        if (window.ActiveXObject)
        {
            // IE
            objXmlDoc.setProperty("SelectionLanguage", "XPath");
            arrNodes = objXmlDoc.selectNodes(strXPath);
        }
        else
        {
            // w3c compliant browsers
            arrNodes = objXmlDoc.evaluate(strXPath, objXmlDoc, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

            while (objNodes.iterateNext())
            {
                arrNodes[intIndex] = objNodes[intIndex];
                intIndex++;
            }
        }

        return arrNodes;
    }

    this.xmlHttpRequest = function (strXmlSource, objCallBack)
    {
        var objXmlHttp = null;

        if (window.XMLHttpRequest)
            objXmlHttp = new XMLHttpRequest();
        else if (window.ActiveXObject)
            objXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        else
            alert('Your browser does not support AJAX.');

        objXmlHttp.onreadystatechange = function ()
        {
            checkRequestData(objXmlHttp, objCallBack);
        }

        objXmlHttp.open('GET', strXmlSource, true)
        objXmlHttp.send(null);
    }

    function checkRequestData(objXmlHttp, objCallBack)
    {
        if (objXmlHttp.readyState == 4)
        {
            if (objXmlHttp.status == 200)
            {

                if (objCallBack)
                    objCallBack(objXmlHttp);
            }
            else
                alert("XmlHttpRequest failed. Request status: " + objXmlHttp.status + " " + objXmlHttp.statusText);
        }
    }
}
