function $id(id) { return (document.getElementById)? document.getElementById(id) : document.all[id]; }
function trim(s) { return s.replace(/(^\s+|\s+$)/g, '');}

function illy_common() {

    this.searchbox = function() {
        var element = null;
        if ($id('search')) element = $id('search'); else return;
        var defvalue = 'Search';
        element.onclick = function() {
            if (this.value == defvalue) this.value = '';
        }
        element.onblur = function() {
            if (trim(this.value) == '') this.value = defvalue;
        }
    };

    this.newslettersign = function() {
        var element = null;
        if ($id('newsletter')) element = $id('newsletter'); else return;
        var defvalue = 'Your email';
        element.onclick = function() {
            if (this.value == defvalue) this.value = '';
        }
        element.onblur = function() {
            if (trim(this.value) == '') this.value = defvalue;
        }
    };

    this.init = function() {
        this.searchbox();
        this.newslettersign();
    }

};


function switchLayer(h, s) {
    if ($id(h)) $id(h).style.display = 'none';
    if ($id(s)) $id(s).style.display = 'block';
    return false;
}


function _h_hidedescription() {

    if (($id('parsdescription')) && ($id('moredescription'))) {
        var desc = $id('parsdescription');

        var pars = [];

        for (var i=0; i<desc.childNodes.length; i++) {
            if (desc.childNodes[i].tagName) {
                if (desc.childNodes[i].tagName.toLowerCase() in  {'ul': 'ul', 'ol':'ol', 'p':'p' }) {
                pars.push(desc.childNodes[i]);
            }
        }
    }

        var more = $id('moredescription');
        var label = more.getElementsByTagName('strong')[0];

        if (pars.length > 1) {

            pars[0].style.display = 'inline';
            for (var i=1; i<pars.length; i++) pars[i].style.display = 'none';

            more.style.display = 'inline';
            more.status = false;

            more.onclick = function() {
                if (!this.status) {
                    for (var i=0; i<pars.length; i++) pars[i].style.display = 'block';
                    more.className = 'opened';
                    label.innerHTML = 'Close';
                    more.style.paddingLeft = '0';
                }
                else {
                    pars[0].style.display = 'inline';
                    for (var i=1; i<pars.length; i++) pars[i].style.display = 'none';
                    more.style.paddingLeft = '1.5em';
                    more.className = 'closed';
                    label.innerHTML = 'More';
                }
                this.status = !this.status;
                return false;
            }

        }
        else {
            if (pars.length > 0) {
                pars[0].style.display = 'inline';
            }
        }
    };
};


function Tab() {

    this.op         = 1;
    this.lnk        = [];
    this.tl = [];
    this.tp = [];

    this.getPanels = function(idtabpanel) {
        cp = 0;
        panels = $id(idtabpanel).getElementsByTagName('div');
        for (var i=0; i<panels.length; i++) {
            if ((/tabpanel/).test(panels[i].className)) {
                this.tp.push(panels[i]);
                panels[i].style.display = (++cp == this.op)? 'block':'none';
            }
        }
    }

    this.closeAllPanels = function() {
        for (var i=0; i<this.tp.length; i++)
        this.tp[i].style.display = 'none';
    };


    this.registerPanel = function(element, id) {
        if (!($id(element)) || !($id(id))) return false;
        this.associateRegister(element, id);
    };

    this.setLinkEvt = function(idtablink) {
        this.lnk = $id(idtablink).getElementsByTagName('a');
        for (var i=0; i<this.lnk.length; i++) {
            id = this.lnk[i].hash.replace(/^#/, '');
            this.associateLink(this.lnk[i], id);
            if (i+1 == this.op) this.lnk[i].parentNode.className += ' selected';
        }

        this.tl = $id(idtablink).getElementsByTagName('li');
    };

    this.removeCurrentClass = function() {
        for (var i=0; i<this.tl.length; i++) {
            var ccn = this.tl[i].className;
            if (/selected/.test(ccn))
            this.tl[i].className = trim(ccn.replace(/selected/, ''));
            if (/^\s*$/.test(this.tl[i].className)) this.tl[i].removeAttribute('class');
        }
    };

    this.associateLink = function(l, d) {
        var _self = this;
        l.onclick = function() {
            return function(l) {
                if (!(/selected/.test(l.parentNode.className))) {
                    _self.closeAllPanels();
                    if ($id(d)) {
                        _self.removeCurrentClass();
                        $id(d).style.display = 'block';
                        l.parentNode.className = 'selected';
                    }
                    else alert([d, 'is undefined'].join(' '));
                }
                return false;

            }(l)
        }

        //l = null; // Leak Memory IE (Circular reference)

    };

    this.associateRegister = function(l, d) {
        var _self = this;
        l = $id(l);
        l.onclick = function() {
            return function(l) {
                _self.closeAllPanels();
                _self.removeCurrentClass();
                $id(d).style.display = 'block';
                for (var i=0; i<_self.lnk.length; i++) {
                    if (_self.lnk[i].hash.replace(/^#/, '') == d) _self.lnk[i].parentNode.className += ' selected';
                }
                return false;

            }(l)
        }

        //l = null; // Leak Memory IE (Circular reference)

    }

    this.init = function(idtablink, idtabpanel, openpanel) {
        this.op = openpanel || 1;
        this.getPanels(idtabpanel);
        this.setLinkEvt(idtablink);
        return this;
    }
}


function _h_cartLayer() {

    if (!$id('cartlayer')) return false;
    var cl = $id('cartlayer');

    var tds = cl.getElementsByTagName('td');
    for (var i=0; i<tds.length; i++) {

        tds[i].onmouseover = function(i) {
            return function() {
                var row = this.parentNode;
                var span = row.getElementsByTagName('span');
                var td1 = row.getElementsByTagName('td')[0];
                var img = td1.getElementsByTagName('img')[0];
                img.className = 'imgupdate';
                for (var j=0; j<span.length; j++) {
                    span[j].style.display = 'none';
                }

                var td2 = row.getElementsByTagName('td')[1];
                td2.className += ' btthover';
            }
        }(i);

        tds[i].onmouseout = function(i) {
            return function() {
                var row = this.parentNode;
                var span = row.getElementsByTagName('span');
                var td1 = row.getElementsByTagName('td')[0];
                var img = td1.getElementsByTagName('img')[0];
                img.className = '';
                for (var j=0; j<span.length; j++) {
                    span[j].style.display = 'inline';
                }

                var td2 = row.getElementsByTagName('td')[1];
                td2.className = td2.className.replace(/\s+btthover$/, '');
            }
        }(i);

    }


    var  cartlinks = cl.getElementsByTagName('a');
    for (var i=0; i<cartlinks.length; i++) {
        var lk = cartlinks[i];
        var lkevent = cartlinks[i].onclick;
        if (lk.rel == "removeitem") {
            lk.onclick = (function() {
                return function() {
                    this.getElementsByTagName('img')[0].style.visibility = 'hidden';
                    if (typeof lkevent === 'function') lkevent();
                    /* return false; */
                    freezecart();
                }
            })();
        }
    }

};

function freezecart() {
    if (!$id('cartlayer')) return false;
    var cl = $id('cartlayer');

    var tds = cl.getElementsByTagName('td');
    for (var i=0; i<tds.length; i++) {

        tds[i].onmouseover = function(i) {
            return function() { }
        }(i);

        tds[i].onmouseout = function(i) {
            return function() { }
        }(i);
    }

    $id('hcart').getElementsByTagName('ul')[0].className = 'removing';
};



/*** overlayer ***/
function _h_closeoverlay(overlayid, centlayerid) {

        $id(overlayid).style.display = 'none';
        $id(centlayerid).style.display = 'none';


        var html = document.getElementsByTagName('html')[0];
        html.style.height = 'auto';
        html.style.width = 'auto';

        var body = document.getElementsByTagName('body')[0];
        body.style.overflow = 'auto';
        body.style.height = 'auto';
        body.style.width = 'auto';

        cnt = $id(centlayerid).getElementsByTagName('div');
        for (var i=0; i<cnt.length; i++) cnt[i].className = cnt[i].className.replace(/wrong/, '');

        // show selects
        var selects = document.getElementsByTagName('select');
        for (var i=0; i<selects.length; i++) {
            if(!(/(^|\b)nohide(\b|$)/).test(selects[i].className)) selects[i].style.display = 'inline';
        }
        return false;

};



/*** overlayer ***/
function _h_openoverlay(formid) {

    if (document.body.scrollTop) {
        document.body.scrollTop = 0;
    } else {
        window.scrollTo(0,0);
    }

    var html = document.getElementsByTagName('html')[0];
    html.style.height = '100%';
    html.style.width = '100%';

    var body = document.getElementsByTagName('body')[0];
    body.style.overflow = 'hidden';
    body.style.height = '100%';
    body.style.width = '100%';

    // hide selects
    var selects = document.getElementsByTagName('select');
    for (var i=0; i<selects.length; i++) {
        //alert(selects[i].getAttribute('className'));
        if ((!(/(^|\b)nohide(\b|$)/).test(selects[i].getAttribute('className')))
         && (!(/(^|\b)nohide(\b|$)/).test(selects[i].className))) { selects[i].style.display = 'none'; }
    }

    var container = formid + '_overlayer';
    var centlayer = formid + '_cl';


    if ($id(container) && $id(centlayer)) {
        $id(container).style.display = 'block';
        $id(centlayer).style.display = 'block';
    }

    else {

        // overlayer
        var     f_ov = document.createElement('div');
                f_ov.id = container;
                f_ov.className = [f_ov.className.toString(), 'fullwidth'].join(' ');

        // centered box
        var         centeredlayer = document.createElement('div');
                    centeredlayer.className = 'centeredlayer';
                    centeredlayer.id = centlayer;


        var closelink = $id(formid).getElementsByTagName('a')[0];
        closelink.innerHTML = closelink.rel;
        closelink.onclick = function() {
            _h_closeoverlay(container, centlayer);

            if ((formid == 'edit_bill_add') ||
                (/^edit_ship_add/.test(formid))) {
                _h_restoredataform(formid);
            }

            if (formid == 'edit_bill_add') {
                _h_useshippingaddress($id('b_useshipping'));
            }

            if (document.all && !window.opera) {
                html.style.overflow = 'auto';
            }


            return false;
        }


        centeredlayer.appendChild($id(formid))
        body.appendChild(centeredlayer);
        body.appendChild(f_ov);
    }

}

/*** savedataform ****/
var _h_formbackup = {};


function _h_savedataform(idform) {

    if (_h_formbackup[idform]) return;

    _h_formbackup[idform] = [];
    var objid, field;
    var fs = $id(idform).getElementsByTagName('fieldset');

    for (var i=0; i<fs.length; i++) {
        if (fs[i].getElementsByTagName('input')[0]) {
            field = fs[i].getElementsByTagName('input')[0];
            objid = field.id;

            if (field.type == 'text') _h_formbackup[idform][objid]  = field.value;
            if (field.type == 'checkbox') _h_formbackup[idform][objid] = (field.checked)? '1' : '0';
        }
        if (fs[i].getElementsByTagName('select')[0]) {
            field = fs[i].getElementsByTagName('select')[0];
            objid = field.id;
            _h_formbackup[idform][objid] = field.selectedIndex;
        }
        //alert(_h_formbackup[idform][objid]);
    }
}


function _h_restoredataform(idform) {
    var objid, field;
    var fs = $id(idform).getElementsByTagName('fieldset');

    for (var i=0; i<fs.length; i++) {
        if (fs[i].getElementsByTagName('input')[0]) {
            field = fs[i].getElementsByTagName('input')[0];
            objid = field.id;

            if (field.type == 'text') field.value = _h_formbackup[idform][objid];
            if (field.type == 'checkbox') {
                if (_h_formbackup[idform][objid] == '1') field.checked = 'checked';
                else field.checked = false;
            }
        }
        if (fs[i].getElementsByTagName('select')[0]) {
            field = fs[i].getElementsByTagName('select')[0];
            objid = field.id;
            field.selectedIndex = _h_formbackup[idform][objid];
        }
    }
}


function switchFields(noderoot, els, status, classexception) {

    var re = ["(^|\\b)", classexception , "(\\b|$)"].join('');
    var ce = new RegExp(re, "gi");

    var elslist = noderoot.getElementsByTagName(els);
    for (var i=0; i<elslist.length; i++) {
        if (status) {
            elslist[i].removeAttribute('disabled');
        }
        else {
            if ((classexception == '') || (!(ce.test(elslist[i].className))))
                elslist[i].setAttribute('disabled', 'disabled');
        }
    }
}
/*********************************************************/


var quantitykeys = {
    '8': 8, '9': 9, '13': 13, // backspace, tab and enter keys
    '48': 48, '49': 49, '50': 50, '51': 51,
    '52': 52, '53': 53, '54': 54, '55': 55,
    '56': 56, '57': 57 };


function phoneAssistant(f) {

    var addKpEvent = function(field) {
        field.onkeypress = function(e) {
            if (!e) var e = window.event;
            if (e.keyCode) code = e.keyCode;
            else if (e.which) code = e.which;
            if (!(code in quantitykeys)) return false;

            var l = this.value.length;
            if (!(code in {'8': 8, '9': 9, '13': 13})) {
                if ((l == 3) || (l == 7)) this.value += '-';
            }
        }
    };


    var ips = document.getElementsByTagName('input');
    for (var i=0; i<ips.length; i++) {
        if (/phoneassistant/.test(ips[i].className)) {
           addKpEvent(ips[i]);
        }
    }

};

function zipAssistant(f) {

    var addKpEvent = function(field) {
        field.onkeypress = function(e) {
            if (!e) var e = window.event;
            if (e.keyCode) code = e.keyCode;
            else if (e.which) code = e.which;

            var l = this.value.length;
            if (!(code in {'8': 8, '9': 9, '13': 13})) {
                if (l == 5) this.value += '-';
            }
        }
    };


    var ips = document.getElementsByTagName('input');
    for (var i=0; i<ips.length; i++) {
        if (/zipassistant/.test(ips[i].className)) {
           addKpEvent(ips[i]);
        }
    }

};

function dateAssistant(f) {

    var addKpEvent = function(field) {
        field.onkeypress = function(e) {
            if (!e) var e = window.event;
            if (e.keyCode) code = e.keyCode;
            else if (e.which) code = e.which;

            var l = this.value.length;
            if (!(code in {'8': 8, '9': 9, '13': 13})) {
                if ((l == 2) || (l==5)) this.value += '/';
            }
        }
    };


    var ips = document.getElementsByTagName('input');
    for (var i=0; i<ips.length; i++) {
        if (/dateassistant/.test(ips[i].className)) {
           addKpEvent(ips[i]);
        }
    }

};


function giftAssistant(f) {

    var addKpEvent = function(field) {
        field.onkeyup = function(e) {
            if (this.value.length > 240) {
                this.value = this.value.substr(0, 240);
                return false;
            }
        }

        field.onkeypress = function(e) {
            if (!e) var e = window.event;
            if (e.keyCode) code = e.keyCode;
            else if (e.which) code = e.which;

            if (!(code in {'8': 8, '9': 9, '13': 13})) {
                var charcode = String.fromCharCode(code);
                if (!(/[\s0-9a-z\.,;:\*\+\^\?\=\)\(\/&%\$\£'"!\\\|]/.test(charcode))) return false;
            }
        }
    };


    var ips = document.getElementsByTagName('textarea');
    for (var i=0; i<ips.length; i++) {
        if (/giftassistant/.test(ips[i].className)) {
           addKpEvent(ips[i]);
        }
    }

};


var DOMBuilder = function(node) {

    /* private methods */
    var _node = (node || document.body);
    var _shortcuts = {
        'class'	: 'className',
        'text'	: 'innerHTML'
    };

	/* public/privileged methods */
	return {
		create :	function(obj, n, type) {
			var n = (n || _node);
			for (var p in obj) {
				if (obj.hasOwnProperty(p)) {
					if (typeof obj[p] === 'object') {

						var element = p.split('#');
						if (typeof element[1] === 'string') {
							obj[p].id = element[1];
						}

						var newnode = document.createElement(element[0]);
						arguments.callee(obj[p], newnode, true);
                        if (!!type) {
                            n.appendChild(newnode);
                        }
                        else {
                            return newnode;
                        }
					}
					else {
						var prop = (p in _shortcuts)? _shortcuts[p] : p;
						n[prop] = obj[p];
					}
				}
			}
		},

		remove :	function(id, complete) {
			var node = _H.DOM.$(id);
			if (!!complete) { return node.parentNode.removeChild(node); };
			while (node.childNodes[0]) { node.removeChild(node.childNodes[0]); };
		}
	}
}


function _h_newslettercheck() {

    if ($id('newslettersign') && $id('newsletter')) {
        var re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)+(\.\w{2,4})+$/i;
        var fs = $id('newslettersign').getElementsByTagName('fieldset')[0];
        var par = $id('newslettersign').getElementsByTagName('p')[0];
        var mesg = $id('newslettersign').getElementsByTagName('strong')[0];
        $id('newslettersign').onsubmit = function() {

            if (!re.test($id('newsletter').value)) {
                $id('newsletter').focus();
                par.className = 'emailerror';
                fs.className = 'emailerror';
                mesg.innerHTML = "Please, check the email you inserted";

                $id('newsletter').onkeydown = function() {
                    fs.className = '';
                }
                return false;

            }
        }
    }

}



function smoothmenu() {

    if (!$id('flmenu')) return;
    var menu = $id('flmenu');
    var flnodes = $id('flmenu').childNodes;
    var flcounter = flnodes.length;
    var flitems = [];
    var intv = null;

    while (flcounter--) {
        if (flnodes[flcounter].nodeType === 1 && !(/current/).test(flnodes[flcounter].className)) {

            var nestedlist = flnodes[flcounter].getElementsByTagName('ul')[0];
            if (!nestedlist) return;
            var clonelist = document.body.appendChild(nestedlist.cloneNode(true));
            clonelist.id = 'flmenu';
            clonelist.style.position = 'absolute';
            clonelist.style.left     = '-5000px';
            clonelist.style.width    = '1000px';
            clonelist.style.display  = 'block';
            var lis = clonelist.getElementsByTagName('li');
            for (var j=0; j<lis.length; j++) {
                lis[j].style.display = 'block';
                lis[j].style.fontSize = '1.2em';
                if (document.all && !window.opera) lis[j].style.fontSize = '1.1em';
                if (lis[j].className === 'shortcutslist') {
                    lis[j].style.height = 'auto';
                    lis[j].style.height = '1%';
                    lis[j].style.overflow = 'hidden';
                    if (/safari/i.test(navigator.userAgent)) {
                        lis[j].style.overflow = 'auto';
                        lis[j].style.height = 'auto';
                        lis[j].style.margin = '0 0 11px 0';
                    }

                }
                else {
                    lis[j].style.height = '2.2em';
                }
            }
            flitems[flnodes[flcounter].id] = clonelist.offsetHeight ;
            //alert(flnodes[flcounter].id + " -- " +flitems[flnodes[flcounter].id]);

            flnodes[flcounter].onmouseover = (function(node, list) {
                return function() {

                    if ((/jsmooth/i).test(list.className)) return;

                    var height = flitems[node.id];
                    //alert(height);

                    var start = 0;

                    (function() {
                        if (start < height) {
                            start += 5;
                            list.style.height = [start, 'px'].join('');
                            intv = setTimeout(arguments.callee, 10);
                        }
                        else {
                            list.className = 'jsmooth';
                            return;
                        }

                    })();

                }
            })(flnodes[flcounter], nestedlist);


            flnodes[flcounter].onmouseout = (function(node, list) {
                return function(e) {

                    if (!e) var e = window.event;
                    var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
                    //alert(reltg.tagName);

                    while (reltg.tagName !== 'BODY') {
                        if (reltg && reltg.id === node.id){
                            return false;
                        }
                        reltg = reltg.parentNode;
                    }
                    list.className = '';
                    clearInterval(intv);
                };

            })(flnodes[flcounter], nestedlist);

        }
    }

}

function hplauncheslink(tag) {

    if (!$id('home')) return false;
    var nTitles = $id('home').getElementsByTagName(tag);
    if (!nTitles) return false;
    var lTitles = nTitles.length;
    //alert(lTitles);
    while (lTitles--) {
        if (nTitles[lTitles].firstChild.tagName === 'A') {
            var link = element = nTitles[lTitles].firstChild;
            while (element.tagName !== 'DIV') element = element.parentNode;
            //alert(element);
            element.style.cursor = 'pointer';
            (function(el, l) {
                el.onclick = function() {
                    location.href = l.href;
                }
            })(element, link)
        }
    }


}









/*********************************************************/

/*** overlayer ***/
function _h_closeoverlayvideo(overlayid, centlayerid) {

        $id(overlayid).style.display = 'none';
        $id(centlayerid).style.display = 'none';


        var html = document.getElementsByTagName('html')[0];
        html.style.height = 'auto';
        html.style.width = 'auto';

        var body = document.getElementsByTagName('body')[0];
        body.style.overflow = 'auto';
        body.style.height = 'auto';
        body.style.width = 'auto';

        return false;
};


/*** overlayer ***/
function _h_openoverlayvideo(id, flv) {
    var selects = document.getElementsByTagName('select');
    for (var i=0; i<selects.length; i++) {
        //alert(selects[i].getAttribute('className'));
        if ((!(/(^|\b)nohide(\b|$)/).test(selects[i].getAttribute('className')))
         && (!(/(^|\b)nohide(\b|$)/).test(selects[i].className))) { selects[i].style.display = 'none'; }
    }


    if (document.body.scrollTop) {
        document.body.scrollTop = 0;
    } else {
        window.scrollTo(0,0);
    }

    var html = document.getElementsByTagName('html')[0];
    html.style.height = '100%';
    html.style.width = '100%';

    var body = document.getElementsByTagName('body')[0];
    body.style.overflow = 'hidden';
    body.style.height = '100%';
    body.style.width = '100%';


    var container = id + '_overlayer';
    var centlayer = id + '_cl';


    if ($id(container) && $id(centlayer)) {
        $id(container).style.display = 'block';
        $id(centlayer).style.display = 'block';
    }

    else {

        // overlayer
        var     f_ov = document.createElement('div');
                f_ov.id = container;
                f_ov.className = [f_ov.className.toString(), 'fullwidth'].join(' ');

        // centered box
        var         centeredlayer = document.createElement('div');
                    centeredlayer.className = 'centeredlayer';
                    centeredlayer.id = centlayer;


   var vars = { "videoUrl"         : flv || "video_700x394.flv" };
   var pars = {
        "allowFullScreen"   : "true",
        "wmode"             : "transparent"
    };
    swfobject.embedSWF("/wcsstore/IllyUS/swf/playerv2_illyus.swf", "swfvideocat", "700", "394", "9.0.0", "../../swf/expressinstall.swf", vars, pars);


        var closelink = $id(id).getElementsByTagName('a')[0];
        //closelink.innerHTML = closelink.rel;
        closelink.onclick = function() {
            _h_closeoverlay(container, centlayer);

            if (document.all && !window.opera) {
                html.style.overflow = 'auto';
            };

             for (var i=0; i<selects.length; i++) {
                if(!(/(^|\b)nohide(\b|$)/).test(selects[i].className)) selects[i].style.display = 'inline';
            };

            return false;
        }


        centeredlayer.appendChild($id(id))
        body.appendChild(centeredlayer);
        body.appendChild(f_ov);
    }

}


/*********************************************************/




DomLoad.load(function() {
    var ic = new illy_common();
    ic.init();
    smoothmenu();
    hplauncheslink('h2');
    hplauncheslink('h4');

    _h_hidedescription();
    _h_cartLayer();
    _h_newslettercheck();
});