/* Core method */
JsCore = {
    $ : function(id){
        if (document.getElementById != null){
            return document.getElementById(id);
        }
        if (document.all != null){
            return document.all[id];
        }
        return null;
    },
    addListener : function(objObject, strEventName, fnHandler)
    {
        if (objObject.addEventListener)
        {
            objObject.addEventListener(strEventName, fnHandler, false);
        }else{
            if (objObject.attachEvent){
                objObject.attachEvent("on" + strEventName, fnHandler);
            }
        }
    },
    hasClassName: function(element, className){
        if(this.$(element) == null) return;
        var elementClassName = this.$(element).className;
        return (elementClassName.length > 0 && (elementClassName == className || new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
    },
    addClassName: function(element, className){
        if(this.$(element) == null) return;
        if(!this.hasClassName(element, className)){
            this.$(element).className += ( this.$(element).className ? ' ' : '') + className;
            return true;
        }else{
            return false;
        }
    },
    removeClassName: function(element, className){
        if(this.$(element) == null) return;
        var currentClassName = this.$(element).className;
        this.$(element).className =  this.strip(currentClassName.replace(new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' '));
        return true;
    },
    strip: function(string) {
        return string.replace(/^\s+/, '').replace(/\s+$/, '');
    }
};
/* Validate string methods */
var Validate = {
    /* Only numbers (allow decimal) */
    regDigits: /^[\d\.]*$/,
    /* Something valid-ish for an email */
    regEmail:        /^[a-z\d\.\-_]+@[a-z\d\.\-_]{2,}\.[a-z]{2,10}$/i,
    digits: function(testValue)
    {
        return this.regDigits.test(testValue);
    },
    email: function(testValue)
    {
        return this.regEmail.test(testValue);
    }
};
/* Filtr string methods */
var Filter = {
    regTrim: /^\s*(.+?)\s*$/,
    trim: function(testValue) {
         return testValue.replace(this.regTrim, '$1');
    }
};
/* Get type browser */
var Browser = {
    IE:     !!(window.attachEvent && !window.opera),
    Opera:  !!window.opera,
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1
};
/* Class windows open */
var Windows = {
    defaultParametrs: new Object(
        'width',
        'height',
        'left',
        'top',
        'toolbar',
        'location',
        'directories',
        'menubar',
        'scrollbars',
        'resizable',
        'status',
        'fullscreen'
    ),
    open: function(file, title, parametrs) {
        paramString = this._makeParamString(parametrs);
        window.open(file, title, paramString);
    },
    _makeParamString: function(parametrs) {
        var paramString = '';
        for (var param in parametrs)
        {
          paramString += param + '=' + parametrs[param] + ',';
        }
        paramString = paramString.substring(0, paramString.length-1);
        return paramString;
    }
};
/* Open popup for help info */
var All_nn = {
	getHelp: function()
	{
		parametrs = new Object();
		parametrs['width']  = '601';
		parametrs['height'] = '616';
		parametrs['left']   = (screen.width - 601)/2;
		parametrs['top']    = (screen.height - 616)/2;
		Windows.open('/skins/gtsnew/popup_search_tips.htm', 'Help', parametrs);
	}
};
/* Clock */
//var ClockPrototype = Class.create();

var ClockPrototype = {
	date: new Object(),
	clientDate: new Date(),
	initialize: function(timestamp) {
		this.clientDate = new Date();
		this._setTime(timestamp);
	},
	_setTime: function(timestamp) {
		this.date = new Date();
		this.date.setTime(timestamp);
		/* synchronizing client and server seconds because request timeout */
		this.date.setSeconds(this.clientDate.getSeconds());
		var remainSec = parseInt(60 - this.date.getSeconds());
		setTimeout(function(thisObj) {
			return function() {
			thisObj.updateClock();
		} } (this), remainSec*1000);
	},
	updateClock: function() {
		if(JsCore.$('clock') != null) {
			this.date.setMinutes(this.date.getMinutes()+1);
			var hours   = this.date.getHours();
			var minutes = this.date.getMinutes();
			if(minutes < 10) {
				minutes = '0' + minutes;
			}
			var time = hours + ":" + minutes;
			setTimeout(function(thisObj) {
				return function() {
				thisObj.updateClock();
			} } (this), 60000);
			JsCore.$('clock').update(time);
		}
	}
};
/* Main method */
var FrontEnd = {
    _bookmarkUrl: '',
    _bookmarkTitle: 'Адресный телефонный справочник',
    _startPageError: 'Вы можете сделать страницу стартовой через настройки своего браузера',
    _selectedAdvRubric: '',
    setBookmarkUrl: function(url)
    {
        this._bookmarkUrl = url;
    },
    setBookmarkTitle: function(title)
    {
        this._bookmarkTitle = title;
    },
    setStartPage: function(obj)
    {
        if (Browser.IE && !Browser.Opera){
            obj.style.behavior='url(#default#homepage)';
            obj.setHomePage(this._bookmarkUrl);
            return true;
        }else{
            alert(this._startPageError);
            return false;
        }
        return false;
    },
    addbookmark: function()
    {
        if (Browser.IE && !Browser.Opera) {
            window.external.AddFavorite(this._bookmarkUrl, this._bookmarkTitle);
            return true;
        }else if (Browser.Gecko) {
            window.sidebar.addPanel(this._bookmarkTitle, this._bookmarkUrl, '');
            return true;
        }else if (Browser.Opera) {
            var bookmarkLink = document.createElement('a');
            if(bookmarkLink) {
                bookmarkLink.setAttribute('rel', 'sidebar');
                bookmarkLink.setAttribute('href', this._bookmarkUrl);
                bookmarkLink.setAttribute('title', this._bookmarkTitle);
                bookmarkLink.click();
                return true;
            }
            return false;
        }else{
            alert(this._startPageError);
            return false;
        }
        return false;
    },
    showChildRubrics: function(parentId){
        var showElementId = 'child_' + parentId;
        var parentElementId = 'parent_' + parentId;
        if(document.getElementById(showElementId).style.display == 'block'){
            JsCore.removeClassName(parentElementId, 'minus');
            JsCore.removeClassName(parentElementId, 'bold');
            document.getElementById(showElementId).style.display='none';
        }else{
            JsCore.addClassName(parentElementId, 'minus');
            JsCore.addClassName(parentElementId, 'bold');
            document.getElementById(showElementId).style.display='block';
        }
    },
    enterCheck: function (field,e, eventName)
    {
        var keycode;
        if (window.event) keycode = window.event.keyCode;
        else if (e) keycode = e.which;
        else return true;
        if (keycode == 13)
        {
            try{
                eval(eventName);
            }catch(err){
                alert(err);
            }
            return false;
        }else{
            return true;
        }
    }
};
/* Methods for search string */
var Search = {
    _type: 'rubrics',
    _currentPage: 1,
    _types: new Array('firmResult', 'rubricResult','infopageResult'),
    setCurrentPage: function(page) {
        this._currentPage = parseInt(page);
    },
    setCurrentType: function(type) {
        this._type = type;
    },
    switchType: function(typeId) {
        for(var i=0; i<this._types.length;i++){
            if(this._types[i] != typeId && document.getElementById(this._types[i]) != null){
                document.getElementById(this._types[i]).style.display = "none";
            }
        }
        document.getElementById(typeId).style.display = "block";
    },
    searchSubmit: function(){
        var query = this._getCurrentQuery();
        if (query)
        {
            window.location.href='/simplesearch/search?query=' + query;
            return false;
        }
    },
    _getCurrentQuery: function(){
        if (document.getElementById('search_text').value !='' && Filter.trim(document.getElementById('search_text').value).length >= 2)
        {
            var query = Filter.trim(document.getElementById('search_text').value);
            query = encodeURIComponent(query);
            /*query = query.replace(/"/g, '');
            query = query.replace(/\//g,"");
            query = query.replace(/\\/g,"");
            query = query.replace(/«/g,"");
            query = query.replace(/»/g,"");*/
            return query;
        } else {
            alert('Введите запрос, состоящий из большего количества символов.');
            return false;
        }
    },
    setCurrentQuery: function(query, regions){
        query = query.replace(/&amp;/g, '&');
        query = query.replace(/&laquo;/g, '«');
        query = query.replace(/&raquo;/g, '»');
        query = query.replace(/&ordm;/g, 'º');
        document.getElementById('search_text').value = query;
    },
    searchPager: function(pageEl, totalPages, type) {
        var query = this._getCurrentQuery();
        if(!Validate.digits(pageEl.value) || totalPages < pageEl.value || pageEl.value < 1 ){
            alert('Неверный номер страницы.');
            return false;
        }
        if (query)
        {
            window.location.href='/simplesearch/search/' + query + '/'+ pageEl.value + '/' + type + '/' ;
            return false;
        }
    },
    setExampleQuery: function() {
        var queries = new Array();
        queries[0] = 'рестораны';
        queries[1] = 'мебель на заказ';
        queries[2] = 'автосалоны';
        queries[3] = 'доставка грузов';
        queries[4] = 'недвижимость';
        queries[5] = 'туризм';
        queries[6] = 'кинотеатры';
        queries[7] = 'бутики';
        queries[8] = 'стоматология';
        queries[9] = 'нотариусы';
        queries[10] = 'автозапчасти';
        queries[11] = 'детские товары';
        queries[12] = 'гостиницы';
        queries[13] = 'банки кредиты';
        queries[14] = 'страхование';
        var randQueryNumber = Math.floor(14*Math.random());
        var randQuery = queries[randQueryNumber];
        document.write('<a href="/simplesearch/search?query=' + encodeURIComponent(randQuery) + '" onclick="document.getElementById(\'search_text\').value=\''+randQuery+'\'; Search.searchSubmit();" onfocus="this.blur();" class="case">'+randQuery+'</a>');
    }
};

