// <![CDATA[
function init() {
    initForms();
    if($('login_login'))
        $('login_login').focus();
    setHeights();
    ajaxHash();
    if('onhashchange' in window)
        window.onhashchange = ajaxHash;
    else
        new PeriodicalExecuter(function(pe) { ajaxHash(); } , 0.2);
    initScrollers();
    initSelectors();
}
function initSelectors() {
    $$('.selector').each(function(el) {
        Event.observe(el, 'click', function() {
            el.down().toggle();
        });
        el.getElementsBySelector('.select')[0].immediateDescendants().each(function(div) {
            Event.observe(div, 'click', function() {
                var the_id = div.id.substring(el.id.length+1);
                $(el.id.substring(0, el.id.length-9)).setValue(the_id);
                div.up().next().update(div.innerHTML);
            });
        });
    });
}
function initScrollers() {
    $$('.scroll-for-me').each(function(el) {
        var etop = el.positionedOffset().top;
        new Effect.Move(el, { duration:0.5, x: 0, y: Math.max(0, window.scrollY-etop+5), mode: 'absolute' });
        Event.observe(window, 'scroll', function() {
            new Effect.Move(el, { duration:0.5, x: 0, y: Math.max(0, window.scrollY-etop+5), mode: 'absolute' });
        });
    });
}
function cartStatus(productCount, totalPrice) {
    $$('.cart-count').each(function(el) {
        el.update(productCount);
    });
    $$('.cart-total').each(function(el) {
        el.update(totalPrice);
    });
}
function calculateTotal(total_holder, listid) {
    if(!$(total_holder)) return;
    var total = 0;
    $$('input.quantity').each(function(el) {
        if(listid && !el.hasClassName('list_'+listid)) return;
        if(el.getValue() && parseInt(el.getValue())) {
            if(parseInt(el.up().previous().previous().innerHTML) < el.getValue())
                el.setValue(parseInt(el.up().previous().previous().innerHTML));
            if(parseInt(el.getValue()))
                total += parseInt(el.getValue())*parseFloat(el.up().previous().innerHTML);
        }
    });
    $(total_holder).update(total);
}
function setHeights() {
    if(!$$('div.footer')[0]) return;
    var footer = $$('div.footer')[0];
    if(document.viewport.getDimensions().height-footer.getHeight() > footer.cumulativeOffset().top)
        footer.absolutize().setStyle('top:'+(document.viewport.getDimensions().height-footer.getHeight())+'px');
    else
        if(footer.getStyle('position') == 'absolute')
            footer.relativize().setStyle('top:0');
}
function ajaxHash(hash) {
    if(!hash || typeof(hash) != 'string') {
        if(window.lastAnchor && window.lastAnchor == location.hash) return;
        window.lastAnchor = location.hash;
        hash = location.hash.substring(1);//.split('#')
    }
    if(hash.match(/^#/)) hash = hash.substring(1);
    if(!hash) return;
    /*
    if(window.spids)
        window.spids.each(function(el) {
            if($('spid_'+el)) 
                $('spid_'+el).remove();
        });
    */
    request(hash);
}

function request(str, id) {
    if(!str) {
        error('Invalid Request');
        return;
    }
    new Ajax.Request(root+'ajax/'+str, {
        method:'get',
        onSuccess: function(transport, json) {
            transport.responseText = transport.responseText.split('|^^|');
            json_parse(transport.responseText[1].evalJSON());
            transport.responseText = transport.responseText[0];
            if(id && $(id)) {
                $(id).update(transport.responseText);
                if(transport.responseText.match(/<input|<select|<textarea/g))
                    initForms();
                setHeights();
            };
        },
        onLoading: function() {
            loader();
        },
        onComplete: function() {
            loader('', true);
        },
    });
}
function json_parse(json) {
    if(!json) return;
    if(json['notes'])
        set_notes(json['notes']);
    delete json['notes'];
    if(json['eval'])
        eval(json['eval']);
    delete json['eval'];
    for(var i in json)
        eval(i+'='+json[i]);
}

function initForms() {
    //byclassname = $$(".req")
    var elements = [];
    $A(document.getElementsByTagName('input')).each(function(el) {
        if(el.type == 'radio' || el.type == 'checkbox' || el.type == 'text' || el.type == 'password')
            elements.push(el);
    });
    $A(document.getElementsByTagName('textarea')).each(function(el) { 
        elements.push(el); 
        el.oHeight = el.getHeight();
        el.setStyle('height:'+el.scrollHeight+'px');
        Event.observe(el, 'keyup', function(event) {
            if(event.keyCode != 46 && event.keyCode != 8 && event.keyCode != 13) return;
        });
    });
    $A(document.getElementsByTagName('select')).each(function(el) { elements.push(el); });
    elements.each(function(ins) {
        if(ins.parsed) return;
        ins.parsed = true;
        if($(ins).hasClassName('req')) {
            ins.defval = ins.className.substring(ins.className.match('req').index+4);
            if(ins.type && ins.type != 'radio' && ins.previous() && ins.previous().tagName == 'LABEL')
                ins.previous().innerHTML += '*';
            else if(ins.type && ins.type != 'radio' && ins.next() && ins.next().tagName == 'LABEL')
                ins.next().innerHTML += '*';
        }
        if(ins.previous() && ins.previous().tagName == 'LABEL')
            ins.previous().observe('click', function() { if(this.previous().type && this.next().type == 'checkbox') this.next().click(); else this.next().focus(); });
        else if(ins.next() && ins.next().tagName == 'LABEL')
            ins.next().observe('click', function() { if(this.previous().type && this.previous().type == 'checkbox') this.previous().click(); else this.previous().focus(); });
        if(ins.hasClassName('def'))
            ins.defval = ins.className.substring(ins.className.match('def').index+4);
        if(ins.defval && !ins.value && ((ins.type && ins.type == 'text') || ins.tagName == 'TEXTAREA'))
            ins.value = ins.defval;
        if(ins.hasClassName('max')) {
            ins.maxchars = ins.className.substring(ins.className.indexOf('max')+4);
            if(ins.maxchars.indexOf(' ') != -1)
                ins.maxchars = parseInt(ins.maxchars.substring(0, ins.maxchars.indexOf(' ')));
            if(ins.maxchars)
                Event.observe(ins, 'keypress', function(event) {
                    if(ins.value.length >= ins.maxchars)
                        ins.value = ins.value.substring(0, ins.maxchars-1);
                });
        }
        if(isie6 && ins.type)
            $(ins).addClassName(ins.type);
        if(ins.type == 'password' && ins.name.match(/new_/))
            ins.setValue('');
        Event.observe(ins, 'focus', function(event) {
            if(this.value == this.defval)
                this.value = '';
            this.addClassName('over');
            resetInput(this);
            this.focused = true;
        });
        Event.observe(ins, 'blur', function(event) {
            if(this.defval && !this.value)
                this.value = this.defval;
            this.removeClassName('over');
            this.focused = false;
            validateInput(this);
        });
        Event.observe(ins, 'mouseover', function(event) {
            this.addClassName('over');
        });
        Event.observe(ins, 'mouseout', function(event) {
            if(!this.focused)
                this.removeClassName('over');
        });
    });
    if(isie6)
        $A(document.getElementsByTagName('input')).each(function(el) {
            if(el.type != 'radio' && el.type != 'checkbox' && el.type != 'text' && el.type != 'password')
                $(el).addClassName(el.type);
        });
    
    
    $A(document.forms).each(function(el) {
        if(el.parsed) return;
        el.parsed = true;
        Event.observe(el, 'submit', function(event) {
            var err = false;
            el.getElements().each(function(ins) {
                if((!ins.type || ins.type == 'radio' || ins.type == 'checkbox' || ins.type == 'text' || ins.type == 'password' || ins.type == 'textarea') && !validateInput(ins))
                    err = true;
            });
            if(err) {
                error(formerrort);
                event.stop();
            } else {
                el.getElements().each(function(ins) {
                    if(ins.defval && ins.defval == ins.value)
                        ins.value = '';
                    //if(ins.type && ins.type == 'submit')
                        //ins.disabled = true;
                });
                if(!el.action || el.action.match(root)) {
                    var deb = new Element('input');
                    deb.type = 'hidden';
                    deb.name = 'validated';
                    deb.value = '1';
                    el.insert(deb);
                    ajax_submit(el);
                    event.stop();
                }
            }
        });
    });
}
function fireEvent(element,event){
    if (document.createEventObject){
    // dispatch for IE
    var evt = document.createEventObject();
    return element.fireEvent('on'+event,evt)
    }
    else{
    // dispatch for firefox + others
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent(event, true, true ); // event type,bubbling,cancelable
    return !element.dispatchEvent(evt);
    }
}
function ajax_submit(data, submitUrl, evalComplete) {
    if(!data) {
        error('No Data');
        return;
    }
    if(data.serialize)
        data = data.serialize();
    else
        data = $H(data).toQueryString();
    if(!submitUrl)
        submitUrl = root+'ajax/submit';
    new Ajax.Request(submitUrl, {
        method : 'post',
        parameters: data,
        onSuccess: function(transport, json) {
            transport.responseText = transport.responseText.split('|^^|');
            json_parse(transport.responseText[1].evalJSON());
            transport.responseText = transport.responseText[0];
            if(transport.responseText)
                error(transport.responseText);
        },
        onComplete: function() {
            if(!evalComplete) return;
            eval(evalComplete);
        },
        onLoading: function() {
            loader();
        },
        onComplete: function() {
            loader('', true);
        },
    });
}

function resetInput(ins) {
    ins.removeClassName('err');
    if(ins.previous() && ins.previous().tagName == 'LABEL')
        ins.previous().removeClassName('err');
    else if(ins.next() && ins.next().tagName == 'LABEL')
        ins.next().removeClassName('err');
    /*
    if($(ins.spid)) {
        $(ins.spid).removeClassName('ok');
        $(ins.spid).removeClassName('err');
    }
    if(ins.type && ins.type == 'radio') {
        $A(document.getElementsByTagName('input')).each(function(el) { 
            if(el.type == 'radio' && el.name == ins.name)
                if($(el.spid)) {
                    $(el.spid).removeClassName('ok');
                    $(el.spid).removeClassName('err');
                }
        });
    }
    */
}
function validateInput(ins) {
    resetInput(ins);
    //span start
    /*
    if(!window.spids)
        window.spids = [];
    if(!ins.spid) {
        window.spids.push(window.spids.length);
        ins.spid = 'spid_'+window.spids[window.spids.length-1];
        var span = document.createElement('DIV');
        span.id = ins.spid;
        $(document.body).appendChild(span);
        $(ins.spid).setStyle('position:'+($('popload') && !isie6 ? 'fixed' : 'absolute')+';margin-left:1px;left:'+(ins.positionedOffset().left+ins.getWidth())+'px;top:'+(ins.positionedOffset().top-3)+'px;z-index:101');
    }
    */
    //span end
    //check start
    if(ins.type == 'radio' && ins.hasClassName('req')) {
        var form = ins;
        while(form.tagName != 'FORM')
            if(form.up())
                form = form.up();
            else
                break;
        var result = false;
        form.getElements().each(function(el) {
            if(el.name == ins.name && el.checked)
                result = true;
        });
        if(result) {
            if(ins.checked) {
                ins.addClassName('ok');
                /*
                if($(ins.spid))
                    $(ins.spid).addClassName('ok');
                */
            }
            return true;
        } else {
            ins.addClassName('err');
            if(ins.previous() && ins.previous().tagName == 'LABEL')
                ins.previous().addClassName('err');
            else if(ins.next() && ins.next().tagName == 'LABEL')
                ins.next().addClassName('err');
            /*
            if($(ins.spid))
                $(ins.spid).addClassName('err');
            */
            return false;
        }
    }
    if(
        (ins.value && ins.value != ins.defval && ins.name.match('email') && !ins.name.match(' ') && !email_valid(ins.value)) ||
        (ins.value && ins.hasClassName('int') && ins.value != '0' && !parseFloat(ins.value)) ||
        (ins.name == 'confirm_new_password' && $('new_password').value && ins.value != $('new_password').value) ||
        (ins.hasClassName('req') && 
            (
                (ins.type && ins.type == 'checkbox' && !ins.checked) ||
                (ins.type && (ins.type == 'password' || ins.type == 'text') && (!ins.value || ins.value == ins.defval)) ||
                (ins.tagName == 'TEXTAREA' && (!ins.value || ins.value == ins.defval)) ||
                (ins.tagName == 'SELECT' && (!ins.value || ins.value == ins.defval || ins.value == '0'))
            )
        )
    ) {
        ins.addClassName('err');
        if(ins.previous() && ins.previous().tagName == 'LABEL')
            ins.previous().addClassName('err');
        else if(ins.next() && ins.next().tagName == 'LABEL')
            ins.next().addClassName('err');
        /*
        if($(ins.spid))
            $(ins.spid).addClassName('err');
        */
        return false;
    } else {
        ins.addClassName('ok');
        /*
        if($(ins.spid))
            $(ins.spid).addClassName('ok');
        */
        return true;
    }
    //check end
}
function email_valid(str) {
    return (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(str)) ? true : false;
}


// ]]>
