/*******************************************************************************
** odstrani mezery kolem retezce (obdoba trim() v PHP)
*******************************************************************************/
String.prototype.remsp = function() {
    return this.replace(/\s/g, "");
}

/*******************************************************************************
** Kontrola syntaxe emailove adresy
*******************************************************************************/
function kontrolaEmailu(email) {

    var vzor = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (!vzor.test(email)) return false;
    return true;
}

/*******************************************************************************
** Kontrola vyplnenich emailu ve formulari "poslat ... pritelkyni" v
** katalogu produktovych dat
*******************************************************************************/
function kontrolaEmailProPritelkyni() {
    var e1 = $('emailFrom');
    var e2 = $('emailFor');
    var m1 = e1.value;
    var m2 = e2.value;
    var test = true;

    //test adresy od
    if (m1.remsp() == "" || !kontrolaEmailu(m1)) {
        e1.addClassName('email-error'); //styl se symbolem erroru
        test = false;
    } else {
        e1.removeClassName('email-error');  //v poradku, vychozi styl (bez erroru)
    }

    //test adresy komu
    if (m2.remsp() == "" || !kontrolaEmailu(m2)) {
        e2.addClassName('email-error');  //styl se symbolem erroru
        test = false;
    } else {
        e2.removeClassName('email-error');  //v poradku, vychozi styl (bez erroru)
    }

    if (!test) return false;
    return true;
}

function nahratObrazky(){
var d=document;if(d.images){if(!d.prel) d.prel=new Array();
var i,j=d.prel.length,args=nahratObrazky.arguments;for(i=0; i<args.length; i++) if (args[i].indexOf("#")!=0){
d.prel[j]=new Image;d.prel[j++].src=args[i];}}}

/* změna obrázku při najetí myši(pouze pro IE6) */
function mouseOver(id) {
//    alert('browser: ' + BrowserDetect.browser + ' version:' + BrowserDetect.version);
    if(BrowserDetect.browser == 'Explorer' && BrowserDetect.version <= 6) {
        var elem = $(id);
        var classNamesArray = elem.classNames();
        var classNameString = classNamesArray.find(isActive.curry(id));
        if(classNameString != undefined) {
            return;
        }
        elem.setStyle({
            filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img/" + id + "_hover.png', sizingMethod='scale')"
        });
    }
}

/* změna obrázku při sjetí myši(pouze pro IE6) */
function mouseOut(id) {
    if(BrowserDetect.browser == 'Explorer' && BrowserDetect.version <= 6) {
        var elem = $(id);
        var classNamesArray = elem.classNames();
        var classNameString = classNamesArray.find(isActive.curry(id));
        if(classNameString != undefined) {
            return;
        }

        elem.setStyle({
            filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img/" + id + ".png', sizingMethod='scale')"
        });
    }
}

function isActive(id, e) {
    if(e == (id + 'a')) {
        return true;
    }
    return false;
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

/**
 * Třída pro zobrazení vrsty s dodatečnými informacemi
 *
 * Zobrazuje průhledné pozadí a na něm uprostřed obrazovky
 * vrstvu s detaily
 *
 */
var Layer = Class.create({
    /* KONFIGURACE */
    /* šířka vrsty s detaily */
    layerWidth: 531,
    /* výška vrstvy s detaily */
    layerHeight: 262,
    /* příznak zda již je vrstva s detaily připravena v html(je pouze skryta
     * pomocí display: none;)
     */
    layerPrepared: true,
    /* id vrstvy s detaily */
    layerId: 'productDetailLayer',
    /* id pozadí vrstvy */
    layerBackgroundId: 'productDetailLayerBackground',
    /* id odkazu, ktery schova vrstvu */
    layerHideLinkId: 'productDetailHideLink',
    /* KONEC KONFIGURACE */
    layerBackgroundWidth: 0,
    layerBackgroundHeigth: 0,
    layerTop: 0,
    layerLeft: 0,
    body: null,
    layer: null,
    layerBackground: null,

    initialize: function(configuration) {
        if(configuration !== null) {
            configuration = $H(configuration);
            configuration.each(this.readConfiguration, this);
        }
        this.dimension = document.viewport.getDimensions();
        this.scrollOffsets = document.viewport.getScrollOffsets();
        this.body = $$('body')[0];
//        this.computeLayerPosition();
//        this.computeLayerBackgroundDimension();
        this.createLayer();
        this.createBackground();
    },

    test: function() {
        alert(this.layerWidth + ' ' + this.layerHeight);
    },

    readConfiguration: function(e) {
        switch(e.key) {
            case 'layerWidth':
                if(Object.isNumber(e.value)) {
                    this.layerWidth = e.value;
                }
                break;
            case 'layerHeight':
                if(Object.isNumber(e.value) || (Object.isString(e.value) && e.value == 'auto')) {
                    this.layerHeight = e.value;
                }
                break;
            case 'layerId':
                if(Object.isString(e.value)) {
                    this.layerId = e.value;
                }
                break;
            case 'layerBackgroundId':
                if(Object.isString(e.value)) {
                    this.layerBackgroundId = e.value;
                }
                break;
            case 'layerPrepared':
                this.layerPrepared = e.value;
                break;
            case 'layerHideLinkId':
                if(Object.isString(e.value)) {
                    this.layerHideLinkId = e.value;
                }
                break;
        }
    },

    showLayer: function() {
        if(this.layerPrepared === false) {
            this.body.insert(this.layer);
            this.body.insert(this.layerBackground);
        }
        else if(this.layerId != '' && this.layerBackgroundId != '') {
            this.layer.setStyle({display: 'block'});
            this.layerBackground.setStyle({display: 'block'});
            this.hideLayer = this.hideLayer.curry(this.layerId, this.layerBackgroundId);
            $(this.layerHideLinkId).observe('click', this.hideLayer);
            this.layerBackground.observe('click', this.hideLayer);
        }
    },

    hideLayer: function(layerId, layerBackgroundId, event) {
        Event.stop(event);
        $(layerId).setStyle({display: 'none'});
        $(layerBackgroundId).setStyle({display: 'none'});
    },

    computeLayerPosition: function() {
        this.layerTop = (this.dimension.height / 2 + this.scrollOffsets.top) -  (this.layerHeight / 2);
        this.layerLeft = this.dimension.width / 2 - this.layerWidth / 2;
    },

    computeLayerBackgroundDimension: function() {
        this.layerBackgroundWidth = this.body.getWidth();
        this.layerBackgroundHeigth = this.body.getHeight();
    },

    createLayer: function() {
        if(this.layerPrepared === false) {
            this.layer = new Element('div', {'id' : this.layerId});
        }
        else if(this.layerId != '') {
            this.layer = $(this.layerId);
        }

        if(this.layerHeight == 'auto') {
            this.layerHeight = this.layer.getHeight() + 20;
        }

        this.computeLayerPosition();

        this.layer.setStyle({
            width: this.layerWidth + 'px',
            height: this.layerHeight + 'px',
            top: this.layerTop + 'px',
            left: this.layerLeft + 'px'
        });
    },

    createBackground: function() {
        this.computeLayerBackgroundDimension();
        
        if(this.layerPrepared === false) {
            this.layerBackground = new Element('div', {'id' : this.layerBackgroundId});
        }
        else if(this.layerBackgroundId != '') {
            this.layerBackground = $(this.layerBackgroundId);
        }

        this.layerBackground.setStyle({
            width: this.layerBackgroundWidth + 'px',
            height: this.layerBackgroundHeigth + 'px',
            top: '0',
            left: '0'
        });
    }
});

function showNextProducts(event) {
    event.stop();
    var products = $('products');

    if(products !== null) {
        var childs = products.childElements();
        if(childs.size() > 8) {
            $('productsSwitchNext').setStyle({display: 'none'});
            $('productsSwitchPrev').setStyle({display: 'block'});
            childs.each(function(e, i) {
                if(i <= 8) {
                    e.setStyle({display: 'none'});
                }
                else {
                    e.setStyle({display: 'inline'});
                }
            });
        }
    }
}

function showPrevProducts(event) {
    event.stop();
    var products = $('products');

    if(products !== null) {
        var childs = products.childElements();
        if(childs.size() > 8) {
            $('productsSwitchNext').setStyle({display: 'block'});
            $('productsSwitchPrev').setStyle({display: 'none'});
            childs.each(function(e, i) {
                if(i <= 8) {
                    e.setStyle({display: 'inline'});
                }
                else {
                    e.setStyle({display: 'none'});
                }
            });
        }
    }
}

function productHoverHeight(id) {
    var prodNum = id.substring(12);
    var heightValue = $(id).getHeight();
//    alert(heightValue);
    $(id).setStyle({height: heightValue + 'px'});
    $('productHoverBgH' + prodNum).setStyle({height: heightValue + 'px'});
    $('productHoverTextPos' + prodNum).setStyle({position: 'absolute', top:  0, left: 0, height: heightValue + 'px'});
}

document.observe('dom:loaded', function() {
    var friendSendLink = $('friend-send-link');
    if(friendSendLink !== null) {
        friendSendLink.observe('click', function(event) {
            if(friendSendLink.getStyle('display') == 'block') {
                event.stop();
                var layer = new Layer(null);
                layer.showLayer();
            }
        });
    }

    var nextProducts = $('productsSwitchLinkNext');
    var prevProducts = $('productsSwitchLinkPrev');
    if(nextProducts !== null && prevProducts !== null) {
        nextProducts.observe('click', showNextProducts);
        prevProducts.observe('click', showPrevProducts);
    }

    var moreAboutProduct = $('moreAboutProduct');
    if(moreAboutProduct !== null) {
        moreAboutProduct.observe('click', function(event) {
            if(moreAboutProduct.getStyle('display') == 'block') {
                event.stop();
                var layer = new Layer({
                    layerWidth: 531,
                    layerHeight: 'auto',
                    layerId: 'productDetailLayerDesc',
                    layerBackgroundId: 'productDetailLayerBackground',
                    layerPrepared: true,
                    layerHideLinkId: 'productDetailHideLinkDesc'
                });
                layer.showLayer();
            }
        });
    }
});

function setFocus(id) {
    o = document.getElementById(id);
    o.focus();
}
