﻿/*
Created By: Chris Campbell
Website: http://particletree.com
Date: 2/1/2006

Inspired by the lightbox implementation found at http://www.huddletogether.com/projects/lightbox/
*/

/*-------------------------------GLOBAL VARIABLES------------------------------------*/

var detect = navigator.userAgent.toLowerCase();
var OS,browser,version,total,thestring;

/*-----------------------------------------------------------------------------------------------*/

//Browser detect script origionally created by Peter Paul Koch at http://www.quirksmode.org/

function getBrowserInfo() {
	if (checkIt('konqueror')) {
		browser = "Konqueror";
		OS = "Linux";
	}
	else if (checkIt('safari')) browser 	= "Safari"
	else if (checkIt('omniweb')) browser 	= "OmniWeb"
	else if (checkIt('opera')) browser 		= "Opera"
	else if (checkIt('webtv')) browser 		= "WebTV";
	else if (checkIt('icab')) browser 		= "iCab"
	else if (checkIt('msie')) browser 		= "Internet Explorer"
	else if (!checkIt('compatible')) {
		browser = "Netscape Navigator"
		version = detect.charAt(8);
	}
	else browser = "An unknown browser";

	if (!version) version = detect.charAt(place + thestring.length);

	if (!OS) {
		if (checkIt('linux')) OS 		= "Linux";
		else if (checkIt('x11')) OS 	= "Unix";
		else if (checkIt('mac')) OS 	= "Mac"
		else if (checkIt('win')) OS 	= "Windows"
		else OS 								= "an unknown operating system";
	}
}
//

function checkIt(string) {
	place = detect.indexOf(string) + 1;
	thestring = string;
	return place;
}
//

/*-----------------------------------------------------------------------------------------------*/

Event.observe(window, 'load', initialize, false);
Event.observe(window, 'load', getBrowserInfo, false);
Event.observe(window, 'unload', Event.unloadCache, false);

var lightbox = Class.create();

lightbox.prototype = {
    pageLoadTimer : null,

	yPos : 0,
	xPos : 0,

	initialize: function(ctrl) {
        if (!ctrl) return;
		this.content = ctrl.href;
		Event.observe(ctrl, 'click', this.activate.bindAsEventListener(this), false);
		ctrl.onclick = function(){return false;};
	},
	
	// Turn everything on - mainly the IE fixes
	activate: function(){
		if (browser == 'Internet Explorer'){
			this.getScroll();
			this.prepareIE('100%', 'hidden');
			this.setScroll(0,0);
			this.hideSelects('hidden');
		}
		this.displayLightbox("block");
    
        // GA события о начале загрузки страницы
        //
        //if (pageTracker && pageTracker._trackPageview && pageTracker._trackEvent) {
            switch (this.content) {
                case '/order/a/registration/z/user/old':
                    document.title = 'Оформление заказа – Вход';
                    _gaq.push(['_trackPageview', '/order/a/registration/z/event/loading/user/old']);
                    _gaq.push(['_trackEvent', 'Ordering', 'Loading Registration', 'old user']);
                break;

                case '/order/a/registration':
                    document.title = 'Оформление заказа – Бланк заказа';
                    _gaq.push(['_trackPageview','/order/a/registration/z/event/loading/user/new']);
                    _gaq.push(['_trackEvent', 'Ordering', 'Loading Registration', 'new user']);
                break;
            //}
        }
	},
	
	// Ie requires height to 100% and overflow hidden or else you can scroll down past the lightbox
	prepareIE: function(height, overflow){
		bod = document.getElementsByTagName('body')[0];
		bod.style.height = height;
    // elias: i want scroll lightbox 
		//bod.style.overflow = overflow;
  
		htm = document.getElementsByTagName('html')[0];
		htm.style.height = height;
    // elias: i want scroll lightbox 
		//htm.style.overflow = overflow; 
	},
	
	// In IE, select elements hover on top of the lightbox
	hideSelects: function(visibility){
		selects = document.getElementsByTagName('select');
		for(i = 0; i < selects.length; i++) {
			selects[i].style.visibility = visibility;
		}
	},
	
	// Taken from lightbox implementation found at http://www.huddletogether.com/projects/lightbox/
	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); 
	},
	
	displayLightbox: function(display){
		$('overlay').style.display = display;
		$('lightbox').style.display = display;
		if(display != 'none') this.loadInfo();
	},
	
	// Begin Ajax request based off of the href of the clicked linked
	loadInfo: function() {
        $('lightbox').className = 'loading';
        HideLightbox = false;
        this.pageLoadTimer = {startTime: new Date(), request: this.content};
		var myAjax = new Ajax.Request(
        this.content,
        {method: 'post', parameters: this.params||"", onComplete: this.processInfo.bindAsEventListener(this)}
		);
		
	},
	
	// Display Ajax response
	processInfo: function(response){
        if (HideLightbox == true) return;
        if ($('lbContent'))
            Element.remove($('lbContent'));

        info = "<div id='lbContent'>" + response.responseText + "</div>";
        new Insertion.Before($('lbLoadMessage'), info)
        $('lightbox').className = "done";
        this.actions();
        // запускаем яваскрипты если таковые есть
        var scriptToEval = $('gaTrans');
        if (scriptToEval && scriptToEval.value != '') {
            eval(scriptToEval.value);
        }

        // send page load time to GA
        //if (1 || pageTracker && pageTracker._trackEvent) {
            var plload = (new Date()) - this.pageLoadTimer.startTime;
        
            var lc = '';
            if (plload < 1000)
                lc = "Very Fast < 1 sec.";
            else if (plload < 2000)
                lc = "Fast < 2 sec.";
            else if (plload < 3000)
                lc = "Medium < 3 sec.";
            else if (plload < 5000)
                lc = "Sluggish < 5 sec.";
            else if (plload < 7000)
                lc = "Slow < 7 sec.";
            else
                lc = "Very Slow > 7 sec.";
            
            _gaq.push(['_trackEvent', "Page Load", lc + " Loading Pages", this.pageLoadTimer.request, Math.round(plload/1000)]);
        //}
        
	},
	
	// Search through new links within the lightbox, and attach click event
	actions: function(){
		lbActions = document.getElementsByClassName('lbAction');
		for(i = 0; i < lbActions.length; i++) {
			Event.observe(lbActions[i], 'click', this[lbActions[i].getAttribute('rel')].bindAsEventListener(this), false);
			lbActions[i].onclick = function(){return false;};
		}

	},
	
	// Example of creating your own functionality once lightbox is initiated
	insert: function(e){
        link = Event.element(e).parentNode;
        Element.remove($('lbContent'));

        var myAjax = new Ajax.Request(
            link.href,
            {method: 'post', parameters: "", onComplete: this.processInfo.bindAsEventListener(this)}
        );

	},
	
	// Example of creating your own functionality once lightbox is initiated
	deactivate: function(){


        // GA события о закрытии окон
        //
        //if (pageTracker && pageTracker._trackPageview && pageTracker._trackEvent) {
            if (this.content) {
                switch (this.content) {
                    case '/order/a/registration/z/user/old':
                        document.title = 'Ваша корзина';
                        _gaq.push(['_trackPageview', '/-/a/basket/z/action/recalc/from/order-registration-loaded-user-old']);
                        _gaq.push(['_trackEvent', 'Ordering', 'Close Registration', 'old user']);
                    break;

                    case '/order/a/registration':
                        document.title = 'Ваша корзина';
                        _gaq.push(['_trackPageview','/-/a/basket/z/action/recalc/from/order-registration-loaded-user-new']);
                        _gaq.push(['_trackEvent','Ordering', 'Close Registration', 'new user']);
                    break;

                    case '/order/a/submit':
                        document.title = MainPageTitle;
                        _gaq.push(['_trackPageview','/']);
                        _gaq.push(['_trackEvent','Ordering', 'Close Submit', document.getElementById('orderName').value]);
                    break;
                }
            } else {
                _gaq.push(['_trackEvent','Ordering', 'Cancel Loading', '']);
            }
        //}
    
        if ($('lbContent'))
            Element.remove($('lbContent'));
		
		if (browser == "Internet Explorer"){
			this.setScroll(0,this.yPos);
			this.prepareIE("auto", "auto");
			this.hideSelects("visible");
		}
		
		this.displayLightbox("none");
	}

    ,submitSignOrder: function() {
        // проверка, введен ли логин и пароль
        var login = '', password = '';
        var saveData = $('saveData');
        if (saveData && saveData.checked) {
            login = $F('orderLogin');
            var pass1 = $F('orderPassword');
            var pass2 = $F('orderPasswordRepeat');

            if (login.length > 1) {
                if (pass1.length > 0) {
                    if (pass1 != pass2) {
                        alert( MsgClass.get( 'check_password', 'ordering' ) );
                        return;
                    }
                    password = pass1;
                } else {
                    alert( MsgClass.get('input_password') );
                    $('orderPassword').focus();
                    return;
                }
            } else {
                alert( MsgClass.get('input_login') );
                $('orderLogin').focus();
                return;
            }

            // пишем тип юзера для паши
            Cookie.set(COOKIE_UTYPE, 1);
        } else {
            if (parseInt(Cookie.get(COOKIE_UTYPE)) != 2) {
                Cookie.set(COOKIE_UTYPE, 0);
            }
        }


        var container1 = $('block1container');
        var container2 = $('block2container');
        var blocks = { block1 : [], block2 : [] };

        // первый блок
        var spans = container1.getElementsByTagName('span');
        for (var s=0; s<spans.length; s++) {
            if (!spans[s].getAttribute(INNER_ID) || spans[s].getAttribute(INNER_ID).indexOf('block1')!=0) continue;
            var span  = spans[s];
            var iid   = span.getAttribute(INNER_ID);
            var name  = iid.substr('block1'.length);
            if (name == 'notify1Off' || name == 'notify2Off' || name == 'orderCondExist' || name == 'knowSelfExist') {
                blocks.block1[name] = span.style.display != 'none';
            } else {
                blocks.block1[name] = span.innerHTML;
            }
        }
        // block1

        // вторые блоки
        var entries = tool_getBlocks(container2);
        for (var e=0; e<entries.length; e++) {
            var entry = entries[e];
            blocks.block2[e] = new Array();
            blocks.block2[e].selected = (entries.length==1) || getElementByInnerId(entry, 'block2radio', 'input').checked;
            spans = entry.getElementsByTagName('span');
            for (var s=0; s<spans.length; s++) {
                if (!spans[s].getAttribute(INNER_ID) || spans[s].getAttribute(INNER_ID).indexOf('block2')!=0) continue;
                var span  = spans[s];
                var iid   = span.getAttribute(INNER_ID);
                var name  = iid.substr('block2'.length);
                // исключение
                if (name == 'shop' && span.getElementsByTagName('input').length) {
                    var tmp = span.getElementsByTagName('input');
                    tmp = $A(tmp).find(function(i){return i.name=='shopId'});
                    tmp = tmp.value;
                    blocks.block2[e][name] = tmp;
                } else {
                    blocks.block2[e][name] = span.innerHTML;
                }
            }
        }

        var block2str = '';

        // подготовка строки параметров для блока 2
        // pAddresses = <Address>;<Address>;...<Address>;
        // где Address = <pANum>,<pRegionID>,<pAddress>,<pCodes>,<pDelTypeID>,<pPayTypeID>,<pIsCurrent>

        var payonlineSelected = false;
        var selectedShop = null;
        var countryIndex = 0;
        for (var b=0; b<blocks.block2.length; b++) {
            var block2 = blocks.block2[b];
            block2str += b + DD; // block num
            var addr = '';
            var regn = '';
            switch(block2.country) {
                case 0: case '0': // Россия
                    addr = selectiveEscape(block2.delivAddress||'', [DD,BD,AD]);
                    regn = (block2.region || '');
                break;
                case -2: case '-2':// Другая страна
                    addr = selectiveEscape(block2.delivAddress||'', [DD,BD,AD]);
                    regn = '-2';
                break;
                default: // Какая-то страна
                    addr = selectiveEscape(block2.country||'', [DD,BD,AD]) + AD + selectiveEscape(block2.delivAddress||'', [DD,BD,AD]);
                    regn = '-2';
                break;
            }
            block2str += regn + DD;
            block2str += addr + DD;
            block2str += (block2.shop || '') + DD;
            block2str += block2.delivType + DD;
            block2str += block2.payment + DD;
            block2str += (block2.selected ? 1 : 0) + DD;
            block2str += (block2.country || '') + BD;

            // смотрим не собирается ли чел оплатить картой?
            //
            if (block2.selected && block2.payment == 4)
                payonlineSelected = true;
        
            if (block2.selected) 
                countryIndex = block2.country;
        
            if (block2.selected && block2.shop != '') {
                selectedShop = block2.shop;
            }

        }

        var addInfoStr = '1,' + blocks.block1.knowSelf + ';2,' + blocks.block1.orderCond + ';';

        var inputs = new Array();

        inputs.push( ['block2', block2str] );
        inputs.push( ['addInfo', addInfoStr] );

        inputs.push( ['fio', blocks.block1.fio] );
        inputs.push( ['nick', blocks.block1.nick] );
        inputs.push( ['notifyType_1', (blocks.block1.notify1Off?'0':'1') + blocks.block1.notifyType_1] );
        inputs.push( ['notifyType_2', (blocks.block1.notify2Off?'0':'1') + blocks.block1.notifyType_2] );
        inputs.push( ['gender', blocks.block1.gender] );

        var bid = Cookie.get(COOKIE_BID) || ($('bid') ? $('bid').value : '');
        inputs.push( ['bid', bid] );
        Cookie.erase(COOKIE_BID);
        Cookie.erase(COOKIE_STR);
        
        if (login.length > 0) {
            inputs.push( ['login', login] );
            inputs.push( ['password', password] );
        }
        inputs.push( ['alias', $('userAlias').value] );

        // если указан емайл, то учитываем желание получать спам
        //
        if (blocks.block1.notifyType_2.length > 0 && document.getElementById('acceptMailFeedback'))
            inputs.push( ['acceptMailFeedback', $('acceptMailFeedback').checked ? 1 : 0] );
    
        var prepayElems = document.prepayForm.elements;
        for (var e=0; e<prepayElems.length; e++) {
            if (!prepayElems[e].checked) continue;
            inputs.push( [prepayElems[e].name, prepayElems[e].value] );
            break;
        }


        // если заказ делается из магазина, то сохраняем в куках ид магазина
        // 
        var shopcode = document.getElementById('shop_code');
        if (shopcode) {
            Cookie.set('cookie_shop_code', shopcode.value);
        }

        // если заказ делается в магазин, то тоже сохраняем в куках ид магазина
        //
        if (selectedShop) {
            Cookie.set('cookie_shop_code', selectedShop);
        }

        Element.remove($('lbContent'));

        var params = {};
        for (var i=0; i<inputs.length; i++) {
            params[ inputs[i][0] ] = inputs[i][1];
        }

        // если будет оплата картой, то создаёмотдельный параметр для этого
        //
        if (payonlineSelected) {
            params['payOnline'] = 'true';
        }

        // указываем явно код страны
        //
        params['countryIndex'] = countryIndex;
    
        // загружаем страницу ВАШ ЗАКАЗ ПРИНЯТ В ОБРАБОТКУ
        //
        $('lightbox').className = 'loading';
        var url = '/order/a/submit';

        /// GA 
        var userType = '';
        switch (this.content) {
            case '/order/a/registration/z/user/old':
                userType = 'old';
                url += '/z/user/old';
            break;

            case '/order/a/registration':
                userType = 'new';
                url += '/z/user/new';
            break;
        }
        //if (pageTracker && pageTracker._trackPageview && pageTracker._trackEvent) {
            _gaq.push(['_trackPageview','/order/a/submit/z/event/loading/user/' + userType]);
            _gaq.push(['_trackEvent','Ordering', 'Loading Submit', userType + ' user']);
        //}
        this.content = url;
        /// end of GA
    
        this.pageLoadTimer = {startTime: new Date(), request: url};
        var myAjax = new Ajax.Request(
            url,
            {method: 'post', parameters: params, onComplete: this.processInfo.bindAsEventListener(this)}
        );
        
        // перематываем наверх
        window.scroll(0, 0);
        
        // загружаем в фоне главную страницу
        //
        if (!MainPageLoaded) {
            MainPageTitle = $('pageTitle').innerHTML;
            var insertLoadedMainPage = function(loadedContent) {
                //var bodyDiv = $('col2body');
                var bodyDiv = $('content');
                bodyDiv.innerHTML = '';
                new Insertion.Bottom(bodyDiv, loadedContent);
                //$('head').innerHTML = $('pageHeader').innerHTML;
            }
            if (OrderBodyDiv && OrderBodyDiv.length) {
                insertLoadedMainPage(OrderBodyDiv);
            } else {
                url = '/index-order';
                var myAjax2 = new Ajax.Request( url, { method: 'get', parameters:{}, onComplete: function() {
                    insertLoadedMainPage(myAjax2.transport.responseText);
                }}); 
            }
            MainPageLoaded = true;
        }
    }
    // subimtSignOrder
}
// lightbox

var MainPageLoaded = false;

/*-----------------------------------------------------------------------------------------------*/

// Onload, make all links that need to trigger a lightbox active
function initialize(){
	addLightboxMarkup();
	lbox = document.getElementsByClassName('lbOn');
	for(i = 0; i < lbox.length; i++) {
		valid = new lightbox(lbox[i]);
	}
}

// Add in markup necessary to make this work. Basically two divs:
// Overlay holds the shadow
// Lightbox is the centered square that the content is put into.
function addLightboxMarkup() {
	bod 				= document.getElementsByTagName('body')[0];
	overlay 			= document.createElement('div');
	overlay.id		= 'overlay';
	lb					= document.createElement('div');
	lb.id				= 'lightbox';
	lb.className 	= 'loading';
    var preloader = $('preloaderBox');
    preloader = (preloader && preloader.innerHTML) || '<p>Loading</p>';
	lb.innerHTML	= '<div id="lbLoadMessage">' + preloader + '</div>';
	bod.appendChild(overlay);
	bod.appendChild(lb);
}
//



var HideLightbox = false;

function hideLightbox()
{
    HideLightbox = true;
    var lb = new lightbox(null);
    lb.deactivate();
}











