
var enquireDetect = navigator.userAgent.toLowerCase();
var enquireOS,enquireBrowser,enquireVersion,enquireTotal,enquireThestring;

function enquireGetBrowserInfo() {
    if (enquireCheckIt('konqueror')) {
        enquireBrowser = "Konqueror";
        enquireOS = "Linux";
    }
    else if (enquireCheckIt('safari')) enquireBrowser 	= "Safari"
    else if (enquireCheckIt('omniweb')) enquireBrowser 	= "OmniWeb"
    else if (enquireCheckIt('opera')) enquireBrowser 	= "Opera"
    else if (enquireCheckIt('webtv')) enquireBrowser 	= "WebTV";
    else if (enquireCheckIt('icab')) enquireBrowser 	= "iCab"
    else if (enquireCheckIt('msie')) enquireBrowser 	= "Internet Explorer"
    else if (!enquireCheckIt('compatible')) {
        enquireBrowser = "Netscape Navigator"
        enquireVersion = enquireDetect.charAt(8);
    }
    else enquireBrowser = "An unknown browser";

    if (!enquireVersion) enquireVersion = enquireDetect.charAt(place + enquireThestring.length);

    if (!enquireOS) {
        if (enquireCheckIt('linux')) enquireOS 		= "Linux";
        else if (enquireCheckIt('x11')) enquireOS 	= "Unix";
        else if (enquireCheckIt('mac')) enquireOS 	= "Mac"
        else if (enquireCheckIt('win')) enquireOS 	= "Windows"
        else enquireOS 	= "an unknown operating system";
    }
};

function enquireCheckIt(string) {
    place = enquireDetect.indexOf(string) + 1;
    enquireThestring = string;
    return place;
};

/*-----------------------------------------------------------------------------------------------*/

Event.observe(window, 'load', enquireGetBrowserInfo, false);

var Enquire = Class.create();

Enquire.prototype = {
    yPos : 0,
    xPos : 0,

    initialize: function(url, formDisplayNeeded) {
        this.url = url;
        this.formDisplayNeeded = formDisplayNeeded;
    },

    activate: function(){
        if (enquireBrowser == 'Internet Explorer'){
            this.getScroll();
        //      this.prepareIE('100%', 'hidden');
            this.setScroll(0,0);
            this.hideSelects('hidden');
        }
    },

//    prepareIE: function(height, overflow){
//        bod = document.getElementsByTagName('body')[0];
//        bod.style.height = height;
//        bod.style.overflow = overflow;
//
//        htm = document.getElementsByTagName('html')[0];
//        htm.style.height = height;
//        htm.style.overflow = overflow;
//    },

    hideSelects: function(visibility){
        selects = document.getElementsByTagName('select');
        for(i = 0; i < selects.length; i++) {
            selects[i].style.visibility = visibility;
        }
    },

    getScroll: function(){
        if (self.pageYOffset) {
            this.yPos = self.pageYOffset;
        } else if (document.documentElement && document.documentElement.scrollTop){
            this.yPos = document.documentElement.scrollTop; 
        } else if (document.body) {
            this.yPos = document.body.scrollTop;
        }
    },

    setScroll: function(x, y){
        window.scrollTo(x, y); 
    },

    processEnquire: function() {
        if(this.formDisplayNeeded) {
            $('enquireOverlay').style.display = 'block';
            $('enquire').style.display = 'block';
            $('enquireForm').style.display = 'block';
            $('enquireMessage').style.display = 'none';
            $('enquireLoadMessage').style.display = 'none';

            this.activate();
        } else {
            this.loadInfo();
        }
    },

    loadInfo: function() {
        $('enquireOverlay').style.display = 'block';
        $('enquire').style.display = 'block';
        $('enquireForm').style.display = 'none';
        $('enquireMessage').style.display = 'none';
        $('enquireLoadMessage').style.display = 'block';

        var params = {  customer_name:  $('enquire_customer_name')  ? $('enquire_customer_name').value  : '',
                        customer_email: $('enquire_customer_email') ? $('enquire_customer_email').value : '',
                        customer_phone: $('enquire_customer_phone') ? $('enquire_customer_phone').value : '',
                        product_id:     $('enquire_product_id').value,
                        product_qty:    $('enquire_product_qty').value,
                        attributes:     $('enquire_attributes').value,
                        options:        encode_base64(Form.serializeElements($$('.product-custom-option')))
                    };

        var myAjax = new Ajax.Request(
            this.url,
            {method: 'post', parameters: params, onComplete: this.processInfo.bindAsEventListener(this)}
        );
        
    },

    processInfo: function(transport) {
        response = transport.responseJSON;

        $('enquireLoadMessage').style.display = 'none';

        $('enquireMessage').style.display = 'block';
        $('enquireMessage').className = response.result;

        $('enquireMessageText').innerHTML = response.value;
    },

    hideEnquire: function(){
        if (enquireBrowser == "Internet Explorer"){
            this.setScroll(0,this.yPos);
            this.prepareIE("auto", "auto");
            this.hideSelects("visible");
        }

        $('enquireOverlay').style.display = 'none';
        $('enquire').style.display = 'none';
        $('enquireForm').style.display = 'none';
        $('enquireMessage').style.display = 'none';
        $('enquireLoadMessage').style.display = 'none';
    }
};

enquireProduct = function(productId, qty) {
    if(!window.enquireEnabled) return;
    if(!qty) qty = 1;

    $('enquire_product_id').value = productId;
    $('enquire_product_qty').value = qty;

    enquireForm.processEnquire();
}

getSimpleProductId = function(settings)
{
    var simpleProductId = false;

    if( settings.length == 1
    &&  settings[0].selectedIndex
    )  {
        simpleProductId = settings[0].options[settings[0].selectedIndex].config.products[0];
    }
    else {
        var selectedCount = 0;
        for(var i=settings.length-1; i>=0; i--)
            if(settings[i].value) selectedCount++;

        if(selectedCount == settings.length) { // all selects are not empty
            var productIds = settings[0].options[settings[0].selectedIndex].config.products;
            for(i=1; i<settings.length; i++)
                productIds = arrayIntersect(productIds, settings[i].options[settings[i].selectedIndex].config.products);
            if(productIds.length == 1) simpleProductId = productIds[0];
        }
    }

    return simpleProductId;
}

getAttributesUsed = function(settings)
{
    var result = '';

    for(var i=0; i<settings.length; i++) {
       result += ',' + spConfig.settings[i].id.substr(9,100);
    }

    return result.substr(1,100000);
}

arrayIntersect = function(a, b) {
    var res = [];

    for(var i=0; i<a.length; i++)
        for(var j=0; j<b.length; j++)
            if(a[i] == b[j]) {
                res.push(b[j]);
                break;
            }

    return res;
};

encode_base64 = function (what)
{
    var base64_encodetable = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var result = "";
    var len = what.length;
    var x, y;
    var ptr = 0;

    while( len-- > 0 )
    {
        x = what.charCodeAt( ptr++ );
        result += base64_encodetable.charAt( ( x >> 2 ) & 63 );

        if( len-- <= 0 )
        {
            result += base64_encodetable.charAt( ( x << 4 ) & 63 );
            result += "==";
            break;
        }

        y = what.charCodeAt( ptr++ );
        result += base64_encodetable.charAt( ( ( x << 4 ) | ( ( y >> 4 ) & 15 ) ) & 63 );

        if ( len-- <= 0 )
        {
            result += base64_encodetable.charAt( ( y << 2 ) & 63 );
            result += "=";
            break;
        }

        x = what.charCodeAt( ptr++ );
        result += base64_encodetable.charAt( ( ( y << 2 ) | ( ( x >> 6 ) & 3 ) ) & 63 );
        result += base64_encodetable.charAt( x & 63 );
    }

    return result;
}

