function getSubElements (obj, element)
{
	var ch = (obj.children) ? obj.children : obj.childNodes;

	var cnt = 0, l = ch.length, arr = new Array(), j=0;
	for (var i=0; i < l; i++)
		if (ch [i].tagName == element)
			arr [j++] = ch [i];
	return arr;
}

function menuHandler (e)
{
	e = (e == null) ? event : e;

	var from = e.target ? e.target : e.srcElement;
	var parent = from.parentNode ? from.parentNode : from.parentElement;

	if (from.tagName != "A")
		return true;

	var uls = getSubElements (parent, "UL");
	if (uls.length == 0)
		return true;

	for (var i=0; i<uls.length; i++)
	{
		var d = uls [i].className;
		uls [i].className = (/\bexpanded/g.test (d)) ? d.replace (/(expanded)?$/, "collapsed") : d.replace (/(collapsed)?$/, "expanded");
	}
	
	return false;
}

function createCookie(name,value,days)
{
	if (days) 
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) 
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) 
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) 
{
	createCookie(name,"",-1);
}

function getHTTPObject() {
    if (typeof XMLHttpRequest != 'undefined') {
        return new XMLHttpRequest();
    }
    try {
        return new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            return new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {}
    }
    return false;
}

function login (e, username, password)
{
	e = (e == null) ? event : e;
	var from = e.target ? e.target : e.srcElement;

    var http = getHTTPObject();
    http.open("get", from.action, false, username, password);
    http.send("");

    if (http.status == 200) {
        document.location = from.action;
    } else {
        alert("Nesprávne meno alebo heslo.");
    }
    return false;
}

function covnert_SKK2EUR (value)
{
	var skk = new Number (value.replace(',','.')).toFixed (2);
	if (isNaN (skk))
		return "Prosim zadajte číslo";

	var eur = Math.round (skk / 30.1260 * 1000000) / 1000000;
	eur = eur.toFixed (3);

	eur = eur.toString (10).replace ('.', ',');
	skk = skk.toString (10).replace ('.', ',');

	return skk + " SKK = " + eur + " EUR";
}

function covnert_EUR2SKK (value)
{
	var eur = new Number (value.replace(',','.')).toFixed (3);
	if (isNaN (eur))
		return "Prosim zadajte číslo";

	var skk = Math.round (eur * 30.1260 * 1000000) / 1000000;
	skk = skk.toFixed (2);

	skk = skk.toString (10).replace ('.', ',');
	eur = eur.toString (10).replace ('.', ',');

	return eur + " EUR = " + skk + " SKK";
}

/*
 * Metadata - jQuery plugin for parsing metadata from elements
 *
 * Copyright (c) 2006 John Resig, Yehuda Katz, Jďż˝Ă¶rn Zaefferer, Paul McLanahan
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: $Id: jquery.metadata.js 3640 2007-10-11 18:34:38Z pmclanahan $
 *
 */

/**
 * Sets the type of metadata to use. Metadata is encoded in JSON, and each property
 * in the JSON will become a property of the element itself.
 *
 * There are four supported types of metadata storage:
 *
 *   attr:  Inside an attribute. The name parameter indicates *which* attribute.
 *          
 *   class: Inside the class attribute, wrapped in curly braces: { }
 *   
 *   elem:  Inside a child element (e.g. a script tag). The
 *          name parameter indicates *which* element.
 *   html5: Values are stored in data-* attributes.
 *          
 * The metadata for an element is loaded the first time the element is accessed via jQuery.
 *
 * As a result, you can define the metadata type, use $(expr) to load the metadata into the elements
 * matched by expr, then redefine the metadata type and run another $(expr) for other elements.
 * 
 * @name $.metadata.setType
 *
 * @example <p id="one" class="some_class {item_id: 1, item_label: 'Label'}">This is a p</p>
 * @before $.metadata.setType("class")
 * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
 * @desc Reads metadata from the class attribute
 * 
 * @example <p id="one" class="some_class" data="{item_id: 1, item_label: 'Label'}">This is a p</p>
 * @before $.metadata.setType("attr", "data")
 * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
 * @desc Reads metadata from a "data" attribute
 * 
 * @example <p id="one" class="some_class"><script>{item_id: 1, item_label: 'Label'}</script>This is a p</p>
 * @before $.metadata.setType("elem", "script")
 * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
 * @desc Reads metadata from a nested script element
 * 
 * @example <p id="one" class="some_class" data-item_id="1" data-item_label="Label">This is a p</p>
 * @before $.metadata.setType("html5")
 * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
 * @desc Reads metadata from a series of data-* attributes
 *
 * @param String type The encoding type
 * @param String name The name of the attribute to be used to get metadata (optional)
 * @cat Plugins/Metadata
 * @descr Sets the type of encoding to be used when loading metadata for the first time
 * @type undefined
 * @see metadata()
 */

(function($) {

$.extend({
  metadata : {
    defaults : {
      type: 'class',
      name: 'metadata',
      cre: /({.*})/,
      single: 'metadata'
    },
    setType: function( type, name ){
      this.defaults.type = type;
      this.defaults.name = name;
    },
    get: function( elem, opts ){
      var settings = $.extend({},this.defaults,opts);
      // check for empty string in single property
      if ( !settings.single.length ) settings.single = 'metadata';
      
      var data = $.data(elem, settings.single);
      // returned cached data if it already exists
      if ( data ) return data;
      
      data = "{}";
      
      var getData = function(data) {
        if(typeof data != "string") return data;
        
        if( data.indexOf('{') < 0 ) {
          data = eval("(" + data + ")");
        }
      }
      
      var getObject = function(data) {
        if(typeof data != "string") return data;
        
        data = eval("(" + data + ")");
        return data;
      }
      
      if ( settings.type == "html5" ) {
        var object = {};
        $( elem.attributes ).each(function() {
          var name = this.nodeName;
          if(name.match(/^data-/)) name = name.replace(/^data-/, '');
          else return true;
          object[name] = getObject(this.nodeValue);
        });
      } else {
        if ( settings.type == "class" ) {
          var m = settings.cre.exec( elem.className );
          if ( m )
            data = m[1];
        } else if ( settings.type == "elem" ) {
          if( !elem.getElementsByTagName ) return;
          var e = elem.getElementsByTagName(settings.name);
          if ( e.length )
            data = $.trim(e[0].innerHTML);
        } else if ( elem.getAttribute != undefined ) {
          var attr = elem.getAttribute( settings.name );
          if ( attr )
            data = attr;
        }
        object = getObject(data.indexOf("{") < 0 ? "{" + data + "}" : data);
      }
      
      $.data( elem, settings.single, object );
      return object;
    }
  }
});

/**
 * Returns the metadata object for the first member of the jQuery object.
 *
 * @name metadata
 * @descr Returns element's metadata object
 * @param Object opts An object contianing settings to override the defaults
 * @type jQuery
 * @cat Plugins/Metadata
 */
$.fn.metadata = function( opts ){
  return $.metadata.get( this[0], opts );
};

})(jQuery);



/* reel scroller */
var scrollerSettings = [];
var scroller = {
    _init: function() {
        var o = this.options;
        o.context = this;

        this.options.parent = this.element;
        this.options.id = this.options.parent.attr('id');

        this.options.items = $(this.options.childrenSelector, this.options.parent);
        if (!this.options.items)
            return;

        if (this.options.parent.height() <= this.options.items.eq(0).outerHeight())
            return;

        this.continuousScroll = 0; // used to indicate scrolling difference in hover

        this.options.parent.wrap('<div class="window"></div>');
        this.options.container = this.options.parent.parent();
        this.options.container.css({ visibility: 'hidden' })

        this.options.container.css({ 'overflow': 'hidden', 'width': '100%' });
        this.options.parent.css({ 'width': '2000em' });

        this.options.length = this.options.items.eq(this.options.items.length - 1).offset().left + this.options.items.eq(this.options.items.length - 1).width() - this.options.items.eq(0).offset().left;

        this.prev = $('<a class="p"></a>');
        this.next = $('<a class="n"></a>');

        this.options.container.parent().prepend(this.prev);
        this.options.container.parent().append(this.next);


        if (this.options.moveOnClick) {
            this.next.bind('click', { context: this }, function(event) { event.data.context.move(+1); });
            this.prev.bind('click', { context: this }, function(event) { event.data.context.move(-1); });
        }

        if (this.options.moveOnHover) {
            this.next.bind('mouseenter', { context: this }, function(event) { event.data.context.continuousScroll = +1; event.data.context.move(+1); });
            this.next.bind('mouseleave', { context: this }, function(event) { event.data.context.continuousScroll = 0; });
            this.prev.bind('mouseenter', { context: this }, function(event) { event.data.context.continuousScroll = -1; event.data.context.move(-1); });
            this.prev.bind('mouseleave', { context: this }, function(event) { event.data.context.continuousScroll = 0; });
        }

        this.move(0);
        this.options.container.css({ visibility: 'visible' })
    },
    move: function(i) {
        var context = this;

        var current = scrollerSettings[context.options.id];
        var width = context.options.container.width();

        if (!current)
            current = 0;

        if ((current + i) < 0)
            return;

        var oldPos = context.options.items.eq(current).position().left - context.options.parent.position().left;
        var newPos = context.options.items.eq(current + i).position().left - context.options.parent.position().left;

        context.scroll(newPos);

        if ((newPos + width > context.options.length) && (oldPos + width > context.options.length) && (i > 0))
            return;

        scrollerSettings[context.options.id] = current + i;
    },
    scroll: function(pos) {
        var context = this;

        var width = context.options.container.width();

        context.options.container.animate(
			{ scrollLeft: pos + width > context.options.length ? context.options.length - width : pos },
			context.options.scrolltime,
			null,
			function() {
			    setTimeout(function() {
			        if (context.continuousScroll != 0)
			            context.move(context.continuousScroll);
			    }, 100);
			});
    }
};
$.widget('ui.scroller', scroller); // registering
$.ui.scroller.defaults = $.extend({}, { // default options
    context: undefined,
    id: null,
    childrenSelector: '> *',
    parent: undefined,
    container: undefined,
    items: undefined,
    length: undefined,
    scrolltime: 500,
    moveOnClick: false,
    moveOnHover: true
});




var hideVideo = function(event) {
    if (currentVideo == null)
        return;

    currentVideo.remove();
    currentVideo = null;
    $('*').unbind('click', hideVideo);
}

$(document).ready(function() {
    $('.titulka').css({ position: 'relative' });
    //$('.video-titulka img').attr('src', $('img', this).attr('src') + '?502x700');

    $('.video-titulka').each(function() {
        $('.more').hide();
        var d = $(this).closest('.titulka').metadata();

        $('img', this)
            .css({ cursor: 'pointer' })
            .click(function() {
                $.ajax({
                    url: '/text.aspx?a=' + d.aid + '&c=' + d.cid,
                    success: function(data) {
                        currentVideo = $(data);
                        currentVideo.appendTo($('.titulka'));
                        currentVideo.css({
                            position: 'absolute',
                            top: '0',
                            left: '0',
                            zIndex: '50'
                        });
                        $('*').bind('click', hideVideo);
                    }
                });
            });
    });

    $('.reel .video-item').each(function() {
        var d = $(this).metadata();

        $('img', this)
            .css({ cursor: 'pointer' })
            .click(function() {
                $.ajax({
                    url: '/text.aspx?a=' + d.aid + '&c=' + d.cid,
                    success: function(data) {
                        currentVideo = $(data);
                        currentVideo.appendTo($('.titulka'));
                        currentVideo.css({
                            position: 'absolute',
                            top: '0',
                            left: '0',
                            zIndex: '50'
                        });
                        $('*').bind('click', hideVideo);
                    }
                });
            });
    });

    $('.reel ul').scroller({ scrolltime: 600 });
    $('.reel img').removeAttr('width');
    $('.reel img').removeAttr('height');
    $('.reel').show();



    var imageIndex = 0;
    var loadImage = function(h, i) {
        var md = $.extend({ location: 0, suffix: '' }, h.metadata());
        $.ajax({
            url: '/fotoservis.aspx/GetMetaData',
            type: 'POST',
            dataType: 'json',
            contentType: "application/json; charset=utf-8",
            data: '{i:' + i + ',location:'+ parseInt(md.location) + '}',
            success: function(data) {
                h.animate({ opacity: 0 }, 100, function() {
                    h.html('');
                    h.append($('<div class="inner"><div class="inner-2 autoclear"><img /><h2 /><p /></div></div>'));
                    $('img', h).attr('src', data.d.Url + md.suffix);
                    $('h2', h).text(data.d.Title);
                    $('p', h).text(data.d.Description);

                    if (imageIndex > 0)
                        $('.inner-2', h).append($('<div class="prev">&lt;</div>'));
                    if (data.d.HasNext)
                        $('.inner-2', h).append($('<div class="next">&gt;</div>'));
                    h.animate({ opacity: 1 }, 100);
                });
            }
        });
    }

    $('.gallery').each(function() {
        loadImage($(this), imageIndex);
    });

    $('.gallery .next').live('click', function() { loadImage($(this).closest('.gallery'), ++imageIndex) });
    $('.gallery .prev').live('click', function() { loadImage($(this).closest('.gallery'), --imageIndex) });
});
