﻿/*
 ********************************************************
 *  Common classes
 ********************************************************
 */
Type.registerNamespace('ViagogoAjax.Common');
ViagogoAjax.Common.WebCache = function()
{
    ViagogoAjax.Common.WebCache.initializeBase(this);

    // public fields
}

ViagogoAjax.Common.WebCache.prototype =
{
    // public methods
    add : function(param, results)
    {
        var key = this._generateKey(param);
        this[key] = results;
    },
    
    retrieve : function(param)
    {
        var key = this._generateKey(param);
        return this[key];
    },
    
    // private methods
    _generateKey : function(param)
    {
        var dictionaryKey = '';
        for (var element in param)
        {
            dictionaryKey += '|';
            dictionaryKey += param[element].toString();
        }
        return dictionaryKey;
    },

    initialize : function()
    {
        ViagogoAjax.Common.WebCache.callBaseMethod(this, 'initialize');
    },
    
    dispose : function()
    {
        ViagogoAjax.Common.WebCache.callBaseMethod(this, 'dispose');
    }
    
    // accessors
}
ViagogoAjax.Common.WebCache.registerClass('ViagogoAjax.Common.WebCache', Sys.Component);

/*
 ********************************************************
 *  static form helpers
 ********************************************************
 */
Type.registerNamespace('ViagogoAjax.FormHelper');
ViagogoAjax.FormHelper.getSelectionStart = function ViagogoAjax$FormHelper$getSelectionStart(textBox)
{
    var selectionStart = 0;
    if(textBox.selectionStart != null)
    {
        // DOM compliant
        selectionStart = textBox.selectionStart;
    }
    else
    {
        // IE craplient
	    var range = document.selection.createRange();
        var bookmark = range.getBookmark();
        var selectionStart = bookmark.charCodeAt(2) - 3;
    }
    return selectionStart;
}

/*
 ********************************************************
 *  static window helpers
 ********************************************************
 */
Type.registerNamespace('ViagogoAjax.WindowHelper');
ViagogoAjax.WindowHelper.getWindowWidth = function ViagogoAjax$WindowHelper$getWindowWidth()
{
    var windowWidth = 0;
    if(typeof(window.innerWidth) == 'number')
    {
        // Netscape compliant
        windowWidth = window.innerWidth;
    }
    else if ((document.documentElement) && (document.documentElement.clientWidth))
    {
        // DOM compliant
        windowWidth = document.documentElement.clientWidth;
    }
    else if ((document.body) && (document.body.clientWidth))
    {
        // IE craplient
        windowWidth = document.body.clientWidth;
    }
    return windowWidth;
}

ViagogoAjax.WindowHelper.getWindowHeight = function ViagogoAjax$WindowHelper$getWindowHeight()
{
    var windowHeight = 0;
    if(typeof(window.innerHeight) == 'number')
    {
        // Netscape compliant
        windowHeight = window.innerHeight;
    }
    else if ((document.documentElement) && (document.documentElement.clientHeight))
    {
        // DOM compliant
        windowHeight = document.documentElement.clientHeight;
    }
    else if ((document.body) && (document.body.clientHeight))
    {
        // IE craplient
        windowHeight = document.body.clientHeight;
    }
    return windowHeight;
}

ViagogoAjax.WindowHelper.getScrollXOffset = function ViagogoAjax$WindowHelper$getScrollXOffset()
{
    var scrollXOffset = 0;
    if(typeof(window.pageYOffset) == 'number')
    {
        // Netscape compliant
        scrollXOffset = window.pageXOffset;
    }
    else if ((document.body) && (document.body.scrollLeft))
    {
        // DOM compliant
        scrollXOffset = document.body.scrollLeft;
    }
    else if ((document.documentElement) && (document.documentElement.scrollLeft))
    {
        // IE crapliant
        scrollXOffset = document.documentElement.scrollLeft;
    }
    return scrollXOffset;
}

ViagogoAjax.WindowHelper.getScrollYOffset = function ViagogoAjax$WindowHelper$getScrollYOffset()
{
    var scrollYOffset = 0;
    if(typeof(window.pageYOffset) == 'number')
    {
        // Netscape compliant
        scrollYOffset = window.pageYOffset;
    }
    else if ((document.body) && (document.body.scrollTop))
    {
        // DOM compliant
        scrollYOffset = document.body.scrollTop;
    }
    else if ((document.documentElement) && (document.documentElement.scrollTop))
    {
        // IE crapliant
        scrollYOffset = document.documentElement.scrollTop;
    }
    return scrollYOffset;
}

ViagogoAjax.WindowHelper.getDocumentWidth = function ViagogoAjax$WindowHelper$getDocumentWidth()
{
	return document.width || document.body.offsetWidth;
}

ViagogoAjax.WindowHelper.getDocumentHeight = function ViagogoAjax$WindowHelper$getDocumentHeight()
{
	return document.height || document.body.offsetHeight;
}

ViagogoAjax.WindowHelper.getMouseXPosition = function ViagogoAjax$WindowHelper$getMouseXPosition(ev)
{
    var xPosition = 0;
    
    if (ev.clientX)
    {
        // DOM compliant
        xPosition = ev.clientX;
    }
    else if (document.documentElement)
    {
        // IE crapliant
        xPosition = ev.clientX + document.body.scrollLeft;
    }
    return xPosition;
}

ViagogoAjax.WindowHelper.getMouseYPosition = function ViagogoAjax$WindowHelper$getMouseYPosition(ev)
{
    var yPosition = 0;
    
    if (ev.clientY)
    {
        // DOM compliant
        yPosition = ev.clientY;
    }
    else if (document.documentElement)
    {
        // IE crapliant
        yPosition = ev.clientY + document.body.scrollTop;
    }
    return yPosition;
}

ViagogoAjax.WindowHelper.getElementXPosition = function ViagogoAjax$WindowHelper$getElementXPosition(element)
{
    var xPosition = 0;
    var currentElement = element;
    
    while(currentElement != null)
    {
        xPosition += currentElement.offsetLeft;
        currentElement = currentElement.offsetParent;
    }
    return xPosition;
}

ViagogoAjax.WindowHelper.getElementYPosition = function ViagogoAjax$WindowHelper$getElementYPosition(element)
{
	var yPosition = 0;
	var currentElement = element;

	while(currentElement != null)
	{
		yPosition += currentElement.offsetTop;
		currentElement = currentElement.offsetParent;
	}
	return yPosition;
}

ViagogoAjax.WindowHelper.getElementWidth = function ViagogoAjax$WindowHelper$getElementWidth(element)
{
    var elementBounds = Sys.UI.DomElement.getBounds(element);
    
    return elementBounds.width;
}

ViagogoAjax.WindowHelper.getElementHeight = function ViagogoAjax$WindowHelper$getElementHeight(element)
{
    var height = 0;
    
    if (element.clientHeight)
    {
        // DOM compliant
        height = element.clientHeight;
    }
    return height;
}

ViagogoAjax.WindowHelper.getElementScrollTop = function ViagogoAjax$WindowHelper$getElementScrollTop(element)
{
    var scrollTop = 0;
    
    if (element.scrollTop)
    {
        // DOM compliant
        scrollTop = element.scrollTop;
    }
    return scrollTop;
}

ViagogoAjax.WindowHelper.setElementScrollTop = function ViagogoAjax$WindowHelper$setElementScrollTop(element, scrollTop)
{
    // DOM compliant
    element.scrollTop = scrollTop;
}

ViagogoAjax.WindowHelper.isInFixedDiv = function ViagogoAjax$WindowHelper$isInFixedDiv(element)
{
	var currentElement = element;
	while(true)
	{
		Sys.Debug.trace(ViagogoAjax.StyleHelper.getElementStyle(currentElement, 'position'));
		if(currentElement.parentNode.tagName.toLowerCase() == 'body')
			break;
		currentElement = currentElement.parentNode;
	}
	return false;
}

/*
 ********************************************************
 *  element style helpers
 ********************************************************
 */
Type.registerNamespace('ViagogoAjax.StyleHelper');
ViagogoAjax.StyleHelper.getElementStyle = function ViagogoAjax$StyleHelper$getElementStyle(element, styleProperty)
{
	var style = null;
	if (element.currentStyle)
		style = element.currentStyle[styleProperty];
	else if (window.getComputedStyle)
		style = document.defaultView.getComputedStyle(element, null).getPropertyValue(styleProperty);
	return style;
}

ViagogoAjax.StyleHelper.setDisplay = function ViagogoAjax$StyleHelper$setDisplay(element, show)
{
	if (document.layers)
	{
		document.layers[element.id].display = show;
	}
	else if (document.all)
	{
		document.all[element.id].style.display = show;
	}
	else if (document.getElementById)
	{
		document.getElementById(element.id).style.display = show;
	}
}

/*
 ********************************************************
 *  static navigator helpers
 * http://www.w3schools.com/js/tryit.asp?filename=try_dom_navigator
 ********************************************************
 */
Type.registerNamespace('ViagogoAjax.NavigatorHelper');

ViagogoAjax.NavigatorHelper.BrowserName = function ViagogoAjax$NavigatorHelper$BrowserName()
{
	if(navigator.userAgent.indexOf('Firefox') > -1)
	{
		return 'firefox';
	}
	if(navigator.userAgent.indexOf('MSIE') > -1)
	{
		return 'ie';
	}
	return 'unknown';
}

ViagogoAjax.NavigatorHelper.BrowserMajorVersion = function ViagogoAjax$NavigatorHelper$BrowserMajorVersion()
{
	if(ViagogoAjax.NavigatorHelper.BrowserName() == 'ie')
	{
		if(navigator.userAgent.indexOf('MSIE 7') > -1)
		{
			return 7;
		}
		if(navigator.userAgent.indexOf('MSIE 6') > -1)
		{
			return 6;
		}
		if(navigator.userAgent.indexOf('MSIE 5.5') > -1)
		{
			return 5.5;
		}
	}
	if(ViagogoAjax.NavigatorHelper.BrowserName() == 'firefox')
	{
		return parseInt(navigator.appVersion);
	}
	return 0;
}

/*
 ********************************************************
 *  static arrayHelpers
 ********************************************************
 */
Type.registerNamespace('ViagogoAjax.ArrayHelper');

ViagogoAjax.ArrayHelper.IndexOf = function ViagogoAjax$ArrayHelper$IndexOf(array, value)
{
	for(var arrayIndex = 0; arrayIndex < array.length; arrayIndex++)
	{
		if(array[arrayIndex] == value)
			return arrayIndex;
	}
	return -1;
}


/*
 ********************************************************
 *  static date helpers
 ********************************************************
 */
Type.registerNamespace('ViagogoAjax.DateHelper');

ViagogoAjax.DateHelper.ToString = function ViagogoAjax$DateHelper$ToString(date)
{
	var year = date.getFullYear();
	var month = date.getMonth() + 1;
	if(month < 10)
		month = '0' + month;
	var day = date.getDate();
	if(day < 10)
		day = '0' + day;
	
	return year + month + day
}


if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();