/* PHP serialize/unserialize library.
 *
 * Copyright (C) 2006-2007 Ma Bingyao <andot@ujn.edu.cn>
 * Version: 3.1
 * LastModified: May 3, 2007
 * This library is free.  You can redistribute it and/or modify it.
 */

function php_serialize(o) {
    var p = 0, sb = [], ht = [], hv = 1;
    var classname = function(o) {
        if (typeof(o) == 'undefined' || typeof(o.constructor) == 'undefined') return '';
        var c = o.constructor.toString();
        c = utf16to8(c.substr(0, c.indexOf('(')).replace(/(^\s*function\s*)|(\s*$)/ig, ''));
        return ((c == '') ? 'Object' : c);
    };
    var is_int = function(n) {
        var s = n.toString(), l = s.length;
        if (l > 11) return false;
        for (var i = (s.charAt(0) == '-') ? 1 : 0; i < l; i++) {
            switch (s.charAt(i)) {
                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9': break;
                default : return false;
            }
        }
        return !(n < -2147483648 || n > 2147483647);
    };
    var in_ht = function(o) {
        for (var k in ht) if (ht[k] === o) return k;
        return false;
    };
    var ser_null = function() {
        sb[p++] = 'N;';
    };
    var ser_boolean = function(b) {
        sb[p++] = (b ? 'b:1;' : 'b:0;');
    };
    var ser_integer = function(i) {
        sb[p++] = 'i:' + i + ';';
    };
    var ser_double = function(d) {
        if (isNaN(d)) d = 'NAN';
        else if (d == Number.POSITIVE_INFINITY) d = 'INF';
        else if (d == Number.NEGATIVE_INFINITY) d = '-INF';
        sb[p++] = 'd:' + d + ';';
    };
    var ser_string = function(s) {
        var utf8 = utf16to8(s);
        sb[p++] = 's:' + utf8.length + ':"';
        sb[p++] = utf8;
        sb[p++] = '";';
    };
    var ser_date = function(dt) {
        sb[p++] = 'O:4:"Date":7:{';
        sb[p++] = 's:4:"year";';
        ser_integer(dt.getFullYear());
        sb[p++] = 's:5:"month";';
        ser_integer(dt.getMonth() + 1);
        sb[p++] = 's:3:"day";';
        ser_integer(dt.getDate());
        sb[p++] = 's:4:"hour";';
        ser_integer(dt.getHours());
        sb[p++] = 's:6:"minute";';
        ser_integer(dt.getMinutes());
        sb[p++] = 's:6:"second";';
        ser_integer(dt.getSeconds());
        sb[p++] = 's:11:"millisecond";';
        ser_integer(dt.getMilliseconds());
        sb[p++] = '}';
    }
    var ser_array = function(a) {
        sb[p++] = 'a:';
        var lp = p;
        sb[p++] = 0;
        sb[p++] = ':{';
        for (var k in a) {
            if (typeof(a[k]) != 'function') {
                is_int(k) ? ser_integer(k) : ser_string(k);
                __serialize(a[k]);
                sb[lp]++;
            }
        }
        sb[p++] = '}';
    };
    var ser_object = function(o) {
        var cn = classname(o);
        if (cn == '') ser_null();
        else if (typeof(o.serialize) != 'function') {
            sb[p++] = 'O:' + cn.length + ':"' + cn + '":';
            var lp = p;
            sb[p++] = 0;
            sb[p++] = ':{';
            if (typeof(o.__sleep) == 'function') {
                var a = o.__sleep();
                for (var kk in a) {
                    ser_string(a[kk]);
                    __serialize(o[a[kk]]);
                    sb[lp]++;
                }
            }
            else {
                for (var k in o) {
                    if (typeof(o[k]) != 'function') {
                        ser_string(k);
                        __serialize(o[k]);
                        sb[lp]++;
                    }
                }
            }
            sb[p++] = '}';
        }
        else {
            var cs = o.serialize();
            sb[p++] = 'C:' + cn.length + ':"' + cn + '":' + cs.length + ':{' +cs + '}';
        }
    };
    var ser_pointref = function(R) {
        sb[p++] = 'R:' + R + ';';
    };
    var ser_ref = function(r) {
        sb[p++] = 'r:' + r + ';';
    };
    var __serialize = function(o) {
        if (o == null || o.constructor == Function) {
            hv++;
            ser_null();
        }
        else switch (o.constructor) {
            case Boolean: {
                hv++;
                ser_boolean(o);
                break;
            }
            case Number: {
                hv++;
                is_int(o) ? ser_integer(o) : ser_double(o);
                break;
            }
            case String: {
                hv++;
                ser_string(o);
                break;
            }
            case Date: {
                hv++;
                ser_date(o);
            }
/*            case VBArray: {
                o = o.toArray();
            }
*/            case Object:
            case Array: {
                var r = in_ht(o);
                if (r) {
                    ser_pointref(r);
                }
                else {
                    ht[hv++] = o;
                    ser_array(o);
                }
                break;
            }
            default: {
                var r = in_ht(o);
                if (r) {
                    hv++;
                    ser_ref(r);
                }
                else {
                    ht[hv++] = o;
                    ser_object(o);
                }
                break;
            }
        }
    };
    __serialize(o);
    return sb.join('');
}

function php_unserialize(ss) {
    var p = 0, ht = [], hv = 1;
    var unser_null = function() {
        p++;
        return null;
    };
    var unser_boolean = function() {
        p++;
        var b = (ss.charAt(p++) == '1');
        p++;
        return b;
    };
    var unser_integer = function() {
        p++;
        var i = parseInt(ss.substring(p, p = ss.indexOf(';', p)));
        p++;
        return i;
    };
    var unser_double = function() {
        p++;
        var d = ss.substring(p, p = ss.indexOf(';', p));
        switch (d) {
            case 'NAN': d = NaN; break;
            case 'INF': d = Number.POSITIVE_INFINITY; break;
            case '-INF': d = Number.NEGATIVE_INFINITY; break;
            default: d = parseFloat(d);
        }
        p++;
        return d;
    };
    var unser_string = function() {
        p++;
        var l = parseInt(ss.substring(p, p = ss.indexOf(':', p)));
        p += 2;
        var s = utf8to16(ss.substring(p, p += l));
        p += 2;
        return s;
    };
    var unser_array = function() {
        p++;
        var n = parseInt(ss.substring(p, p = ss.indexOf(':', p)));
        p += 2;
        var a = [];
        ht[hv++] = a;
        for (var i = 0; i < n; i++) {
            var k;
            switch (ss.charAt(p++)) {
                case 'i': k = unser_integer(); break;
                case 's': k = unser_string(); break;
                case 'U': k = unser_unicode_string(); break;
                default: return false;
            }
            a[k] = __unserialize();
        }
        p++;
        return a;
    };
    var unser_date = function() {
        var k, a = [];
        for (var i = 0; i < 7; i++) {
            p++;
            k = unser_string();
            p++;
            a[k] = unser_integer();
        }
        var dt = new Date(
            a['year'],
            a['month'] - 1,
            a['day'],
            a['hour'],
            a['minute'],
            a['second'],
            a['millisecond']
        );
        ht[hv++] = dt;
        return dt;
    }
    var unser_object = function() {
        p++;
        var l = parseInt(ss.substring(p, p = ss.indexOf(':', p)));
        p += 2;
        var cn = utf8to16(ss.substring(p, p += l));
        p += 2;
        var n = parseInt(ss.substring(p, p = ss.indexOf(':', p)));
        p += 2;
        if (cn == "Date" && n == 7) {
            return unser_date();
        }
        if (eval(['typeof(', cn, ') == "undefined"'].join(''))) {
            eval(['function ', cn, '(){}'].join(''));
        }
        var o = eval(['new ', cn, '()'].join(''));
        ht[hv++] = o;
        for (var i = 0; i < n; i++) {
            var k;
            switch (ss.charAt(p++)) {
                case 's': k = unser_string(); break;
                case 'U': k = unser_unicode_string(); break;
                default: return false;
            }
            if (k.charAt(0) == '\0') {
                k = k.substring(k.indexOf('\0', 1) + 1, k.length);
            }
            o[k] = __unserialize();
        }
        p++;
        if (typeof(o.__wakeup) == 'function') o.__wakeup();
        return o;
    };
    var unser_custom_object = function() {
        p++;
        var l = parseInt(ss.substring(p, p = ss.indexOf(':', p)));
        p += 2;
        var cn = utf8to16(ss.substring(p, p += l));
        p += 2;
        var n = parseInt(ss.substring(p, p = ss.indexOf(':', p)));
        p += 2;
        if (eval(['typeof(', cn, ') == "undefined"'].join(''))) {
            eval(['function ', cn, '(){}'].join(''));
        }
        var o = eval(['new ', cn, '()'].join(''));
        ht[hv++] = o;
        if (typeof(o.unserialize) != 'function') p += n;
        else o.unserialize(ss.substring(p, p += n));
        p++;
        return o;
    };
    var unser_unicode_string = function() {
        p++;
        var l = parseInt(ss.substring(p, p = ss.indexOf(':', p)));
        p += 2;
        var sb = [];
        for (var i = 0; i < l; i++) {
            if ((sb[i] = ss.charAt(p++)) == '\\') {
                sb[i] = String.fromCharCode(parseInt(ss.substring(p, p += 4), 16));
            }
        }
        p += 2;
        return sb.join('');
    };
    var unser_ref = function() {
        p++;
        var r = parseInt(ss.substring(p, p = ss.indexOf(';', p)));
        p++;
        return ht[r];
    };
    var __unserialize = function() {
        switch (ss.charAt(p++)) {
            case 'N': return ht[hv++] = unser_null();
            case 'b': return ht[hv++] = unser_boolean();
            case 'i': return ht[hv++] = unser_integer();
            case 'd': return ht[hv++] = unser_double();
            case 's': return ht[hv++] = unser_string();
            case 'U': return ht[hv++] = unser_unicode_string();
            case 'r': return ht[hv++] = unser_ref();
            case 'a': return unser_array();
            case 'O': return unser_object();
            case 'C': return unser_custom_object();
            case 'R': return unser_ref();
            default: return false;
        }
    };
    return __unserialize();
}

function getCookie(name)
{
	var start = document.cookie.indexOf(name + "=");
	var len = start + name.length + 1;
	if ((!start && name != document.cookie.substring(0, name.length)) || start == -1)
		return null;

	var end = document.cookie.indexOf(';', len);
	if (end == -1)
		end = document.cookie.length;

	return unescape(document.cookie.substring(len, end));
}

function setCookie(name, value, expires, path, domain, secure)
{
	var today = new Date();
	today.setTime(today.getTime());
	if (expires)
		expires = expires * 1000 * 60 * 60 * 24;
	var expires_date = new Date(today.getTime() + expires);

	document.cookie = name + '=' + escape(value) +
		(expires ? ';expires=' + expires_date.toGMTString() : '' ) +
		(path ? ';path=' + path : '') +
		(domain ? ';domain=' + domain : '') +
		(secure ? ';secure' : '');
}

function insert_flash(title, loop, width, height)
{
	if (navigator.appVersion.indexOf("MSIE") != -1 && navigator.userAgent.indexOf("Opera") == -1)
	{
		document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="' + width + '" height="' + height + '" codebase="http://active.macromedia.com/flash7/cabs/swflash.cab#version=6,0,0,0">\n');
		document.write('<param name="movie" value="img/' + title + '.swf" />\n');
		document.write('<param name="play" value="true" />\n');
		document.write('<param name="loop" value="' + loop.toString() + '" />\n');
		document.write('<param name="quality" value="high" />\n');
		document.write('<param name="wmode" value="transparent" />\n');
		document.write('</object>\n');
	}
	else
		document.write('<embed src="img/' + title + '.swf" width="' + width + '" height="' + height + '" wmode="transparent" play="true" loop="' + loop.toString() + '" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></embed>\n');
}

function blinkElement(n, i)
{
	if (typeof i == 'undefined') i = 2;
	var x = n.style.backgroundColor;
	if (i && x != '#ff511c')
	{
		n.style.backgroundColor = '#ff511c';
		setTimeout(function() { n.style.backgroundColor = x }, 200);
		setTimeout(function() { blinkElement(n, i - 1) }, 400);
	}
}

function addItem(id, type)
{
	var row = $('#' + type + id);
	if (row.css('background-color') == 'rgb(255, 81, 28)')
		row.css('background-color', row.hasClass('odd') ? 'rgb(249, 249, 249)' : 'transparent');

	var count = $('#count' + id);
	var newCount = parseInt(count.html()) + 1;

 	if (newCount == 1)
	{
		$('#minus' + id).removeClass('minus_disabled');
		$('#minus' + id).addClass('minus');
	}

	if (type == 'cd')
		cabinet_doors[id] = newCount;
	else
		mountings[id] = newCount;

	count.html(newCount.toString());
	setCookie('cart', php_serialize(cabinet_doors) + '|' + php_serialize(mountings), 0, '/', null, false);
	updateCartStatus();
}

function subtractItem(id, type)
{
	var row = $('#' + type + id);
	if (row.css('background-color') == 'rgb(255, 81, 28)')
		row.css('background-color', row.hasClass('odd') ? 'rgb(249, 249, 249)' : 'transparent');

	var count = $('#count' + id);
	var newCount = parseInt(count.html()) - 1;

	if (newCount == -1)
		return;
	else if (newCount == 0)
	{
		$('#minus' + id).removeClass('minus');
		$('#minus' + id).addClass('minus_disabled');

		if (type == 'cd')
			delete cabinet_doors[id];
		else
			delete mountings[id];
	}
	else
	{
		if (type == 'cd')
			cabinet_doors[id] = newCount;
		else
			mountings[id] = newCount;
	}

	count.html(newCount.toString());
	setCookie('cart', php_serialize(cabinet_doors) + '|' + php_serialize(mountings), 0, '/', null, false);
	updateCartStatus();
}

function updateCartStatus()
{
	var cart_items_count = 0;
	for (var item in cabinet_doors)
		cart_items_count += cabinet_doors[item];
	for (var item in mountings)
		cart_items_count += mountings[item];

	if (cart_items_count > 0)
	{
		$('#cart_items_count').html(cart_items_count);
		$('#cart_items').show();
		$('#cart_empty').hide();
		$('#cart_calc').hide();
	}
	else
	{
		$('#cart_items').hide();
		$('#cart_empty').show();
		$('#cart_calc').hide();
	}
}

function hide_classics()
{
	$('#classics').hide();
	setCookie('classics', '-', 1000, '/', null, false);
}


var cabinet_doors = new Array();
var mountings = new Array();

$(window).load(function()
{
	var classics = getCookie('classics');
	if (classics == null || classics.length == 0)
		$('#classics').show();


	var temp = getCookie('cart');
	if (temp != null && temp.length > 0)
	{
		temp = temp.split('|');
		cabinet_doors = php_unserialize(temp[0]);
		mountings = php_unserialize(temp[1]);
	}

	updateCartStatus();

	if (window.location.hash != '')
	{
		var row = document.getElementById(window.location.hash.replace('#', ''));
		setTimeout(function() { blinkElement(row, 3) }, 400);
		setTimeout(function() { row.style.backgroundColor = '#ff511c' }, 1600);
	}

	var alert = document.getElementById('alert');
	if (alert)
		setTimeout(function(){blinkElement(alert, 3)}, 400);

	var kassa_kortbetalning_end = document.getElementById('kassa_kortbetalning_end');
	var kassa_delbetalning_end = document.getElementById('kassa_delbetalning_end');
	if (kassa_kortbetalning_end || kassa_delbetalning_end)
	{
		cabinet_doors = new Array();
		mountings = new Array();
		setCookie('cart', php_serialize(cabinet_doors) + '|' + php_serialize(mountings), 0, '/', null, false);

		updateCartStatus();
	}

	$('#gallery a').lightBox({
		imageLoading: 'img/lightbox-ico-loading.gif',
		imageBtnPrev: 'img/lightbox-btn-prev.gif',
		imageBtnNext: 'img/lightbox-btn-next.gif',
		imageBtnClose: 'img/lightbox-btn-close.gif',
		txtImage: 'Bild',
		txtOf: 'av'
	});

	$('.referens a').lightBox({
		imageLoading: '/img/lightbox-ico-loading.gif',
		imageBtnPrev: '/img/lightbox-btn-prev.gif',
		imageBtnNext: '/img/lightbox-btn-next.gif',
		imageBtnClose: '/img/lightbox-btn-close.gif',
		txtImage: 'Bild',
		txtOf: 'av'
	});

	$('a[@rel*=pu]').lightBox({
		imageLoading: '/img/lightbox-ico-loading.gif',
		imageBtnClose: '/img/lightbox-btn-close.gif',
		txtImage: 'Bild',
		txtOf: 'av'
	});

	$('a[@rel*=pu1]').lightBox({
		imageLoading: '/img/lightbox-ico-loading.gif',
		imageBtnClose: '/img/lightbox-btn-close.gif',
		txtImage: 'Bild',
		txtOf: 'av'
	});

	$('a[@rel*=pu2]').lightBox({
		imageLoading: '/img/lightbox-ico-loading.gif',
		imageBtnClose: '/img/lightbox-btn-close.gif',
		txtImage: 'Bild',
		txtOf: 'av'
	});

	$('a[@rel*=pu3]').lightBox({
		imageLoading: '/img/lightbox-ico-loading.gif',
		imageBtnClose: '/img/lightbox-btn-close.gif',
		txtImage: 'Bild',
		txtOf: 'av'
	});
});
