function getRequestParameter(name) {
	name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
	var regexS = "[\\?&]" + name + "=([^&#]*)";
	var regex = new RegExp(regexS);
	var results = regex.exec(window.location.href);
	if (results == null)
		return "";
	else
		return results[1];
}

var MYSQL_DATE_FORMAT = 'Y-m-d';
var MYSQL_DATETIME_FORMAT = 'Y-m-d H:i:s.u';
var DATE_FORMAT = 'd.m.Y';
var COMPACT_DATE_FORMAT = 'dd.mm.yy';

// see eu.omegasoftware.sro.bean.sro.WorkState
var WORK_STATE_NOT_EXIST = -1;
var WORK_STATE_ACTUAL = 1;
var WORK_STATE_PAUSED = 2;
var WORK_STATE_STOPPED = 3;
var WORK_STATE_DECLARED_TO_GRANT = 4;
var WORK_STATE_REJECTED_BY_EXPERT = 5;

var REQUESTS_FIRST = 1;
var REQUESTS_SECOND = 2;

var SRO_BUILDING_TYPE = 1;
var SRO_DESIGNING_TYPE = 2;
var SRO_ENGINEERING_TYPE = 3;

function getRequestTypeName(typeId){
	return typeId == REQUESTS_FIRST ? '1-ой категории' : '2-ой категории (ООТС)';
}

function actualStateRenderer(value, state) {
	var name = value;
	if (state == WORK_STATE_REJECTED_BY_EXPERT) {
		name = '<s>' + name + '</s>';
	} else if (state == WORK_STATE_DECLARED_TO_GRANT) {
		name = '<span style="color: red">' + name + '</span>';
	} else if (state == WORK_STATE_PAUSED) {
		name = '<span style="color: silver">' + name + '</span>';
	} else if (state == WORK_STATE_STOPPED) {
		name = '<span style="color: olive">' + name + '</span>';
	}
	return name;
}

function stateRenderer(state) {
	switch (state) {
		case WORK_STATE_ACTUAL :
			return 'Актуален';
		case WORK_STATE_PAUSED :
			return 'Приостановлен';
		case WORK_STATE_STOPPED :
			return 'Прекращен';
		case WORK_STATE_DECLARED_TO_GRANT :
			return 'Заявлен на выдачу';
		case WORK_STATE_REJECTED_BY_EXPERT :
			return 'Отклонен экспертом';
	}
}

function decisionRenderer(now, prev) {
	if (now == WORK_STATE_STOPPED) {
		return "Прекращено действие допуска";
	} else if (now == WORK_STATE_ACTUAL && prev == WORK_STATE_DECLARED_TO_GRANT) {
		return "Внесено в свидетельство";
	} else if (now == WORK_STATE_ACTUAL && prev == WORK_STATE_PAUSED) {
		return "Возобновлен";
	} else if (now == WORK_STATE_PAUSED) {
		return "Приостановлено действие допуска";
	} else if (now == WORK_STATE_PAUSED && prev == WORK_STATE_PAUSED) {
		return "Отказано в возобновлении допуска";
	} else if (!now && prev == WORK_STATE_DECLARED_TO_GRANT) {
		return "Отказано на заявку в выдаче";
	}
}

var globalRootAreasStore = null;
var globalWorksStore = null;
var globalSubworksStore = null;
var globalNWorkGroupsStore = null;
var globalNWorksStore = null;
var globalNWorkTypesStore = null;
var globalWorksStatesStore = null;
var globalDistrictStore = null;
var gloabalPicturesStore = null;

function showErrorMsg(errorMsg) {
	Ext.Msg.show({
		msg : errorMsg,
		title : 'Ошибка',
		buttons : Ext.Msg.OK,
		icon : Ext.MessageBox.ERROR
	});
}

function showMsg(msg){
	Ext.Msg.show({
		msg : msg,
		title : 'Внимание',
		buttons : Ext.Msg.OK
	});
}

function shareRootAreasStore() {
	if (!globalRootAreasStore) {
		var connObj = new Ext.data.Connection({
	        timeout : 320000,
	        url : 'xml?get=rootAreas',
	        method : 'POST'
	    });
		
		globalRootAreasStore = new Ext.data.Store({
			isLoaded : false,
			proxy : new Ext.data.HttpProxy(connObj),
            sortInfo : {
                field : 'fullPath',
                direction : 'ASC'
            },
			reader : new Ext.data.XmlReader({
				record : 'area',
				idProperty : 'areaId'
			}, [{
				name : 'areaId',
				type : 'int'
			}, {
				name : 'name',
				type : 'string'
			}, {
				name : 'topParentId',
				type : 'int'
			}, {
				name : 'fullPath',
				type : 'string'
			}, {
				name : 'index',
				type : 'string'
			}]),
			listeners : {
				load : function() {
					globalRootAreasStore.isLoaded = true;
				}
			}
		});
			
		globalRootAreasStore.load();
	}
	return globalRootAreasStore;
}

function shareWorksStore(loadFlag) {
	if (!globalWorksStore) {
		var connObj = new Ext.data.Connection({
	        timeout : 320000,
	        url : 'xml?get=work',
	        method : 'POST'
	    });
		
		globalWorksStore = new Ext.data.Store({
			proxy : new Ext.data.HttpProxy(connObj),
			isLoaded : false,
			reader : new Ext.data.XmlReader({
				record : 'work',
				idProperty : 'workId'
			}, workType() ),
			listeners : {
				load : function() {
					globalWorksStore.isLoaded = true;
				}
			}
		});
		if (loadFlag && !globalWorksStore.isLoaded)
			globalWorksStore.load();
	}
	return globalWorksStore;
}

function shareNWorkGroupsStore(loadFlag) {
	if (!globalNWorkGroupsStore) {
		var connObj = new Ext.data.Connection({
	        timeout : 320000,
	        url : 'xml?get=nworkGroups',
	        method : 'POST'
	    });
		
		globalNWorkGroupsStore = new Ext.data.Store({
			proxy : new Ext.data.HttpProxy(connObj),
			isLoaded : false,
			reader : new Ext.data.XmlReader({
				record : 'work',
				idProperty : 'workId'
			}, workType() ),
			listeners : {
				load : function() {
					globalNWorkGroupsStore.isLoaded = true;
				}
			}
		});
		if (loadFlag && !globalNWorkGroupsStore.isLoaded)
			globalNWorkGroupsStore.load();
	}
	return globalNWorkGroupsStore;
}

function shareSubworksStore(loadFlag) {
	if (!globalSubworksStore) {
		var connObj = new Ext.data.Connection({
	        timeout : 320000,
	        url : 'xml?get=subwork',
	        method : 'POST'
	    });
		
		globalSubworksStore = new Ext.data.Store({
			proxy : new Ext.data.HttpProxy(connObj),
			isLoaded : false,
			reader : new Ext.data.XmlReader({
				record : 'sw',
				idProperty : 'id'
			}, subworkType() ),
			listeners : {
				load : function() {
					globalSubworksStore.isLoaded = true;
				}
			}
		});
		if (loadFlag && !globalSubworksStore.isLoaded)
			globalSubworksStore.load();
	}
	return globalSubworksStore;
}

function shareNWorksStore(loadFlag) {
	if (!globalNWorksStore) {
		var connObj = new Ext.data.Connection({
	        timeout : 320000,
	        url : 'xml?get=nwork',
	        method : 'POST'
	    });
		
		globalNWorksStore = new Ext.data.Store({
			proxy : new Ext.data.HttpProxy(connObj),
			isLoaded : false,
			reader : new Ext.data.XmlReader({
				record : 'sw',
				idProperty : 'id'
			}, nworkType() ),
			listeners : {
				load : function() {
					globalNWorksStore.isLoaded = true;
				}
			}
		});
		if (loadFlag && !globalNWorksStore.isLoaded)
			globalNWorksStore.load();
	}
	return globalNWorksStore;
}

function shareNWorkTypesStore(loadFlag) {
	if (!globalNWorkTypesStore) {
		var connObj = new Ext.data.Connection({
	        timeout : 320000,
	        url : 'xml?get=nworkTypes',
	        method : 'POST'
	    });
		
		globalNWorkTypesStore = new Ext.data.Store({
			proxy : new Ext.data.HttpProxy(connObj),
			isLoaded : false,
			reader : new Ext.data.XmlReader({
				record : 't',
				idProperty : 'i'
			}, [{
				name : 'id',
				mapping : 'i',
				type : 'int'
			}, {
				name : 'name',
				mapping : 'n',
				type : 'string'
			}] ),
			listeners : {
				load : function() {
					globalNWorkTypesStore.isLoaded = true;
				}
			}
		});
		if (loadFlag && !globalNWorkTypesStore.isLoaded)
			globalNWorkTypesStore.load();
	}
	return globalNWorkTypesStore;
}

function shareWorkStatesStore() {
	if (!globalWorksStatesStore) {
		globalWorksStatesStore = new Ext.data.SimpleStore({
			fields : ['workStateId', 'state'],
			id : 0,
			data : [[WORK_STATE_NOT_EXIST, 'Не выдан'],
					[WORK_STATE_ACTUAL, 'Актуален'],
					[WORK_STATE_PAUSED, 'Приостановлен'],
					[WORK_STATE_STOPPED, 'Прекращен'],
					[WORK_STATE_DECLARED_TO_GRANT, 'Заявлен на выдачу'],
					[WORK_STATE_REJECTED_BY_EXPERT, 'Отклонен экспертом']]
		});
	}
	return globalWorksStatesStore;
}

function dateRenderer(val, frmt) {
	if (val) {
		if (frmt)
			return val.format(frmt);
		else
			return val.format(DATE_FORMAT);
	}
}

function notNull(value) {
	return value && value != 'null' ? value : '';
}

function NotNaN (value) {
	if (value!='NaN' && value != 'null') {
		return value;
	} else {
		return '';
	}
}

function isFunction(x) {
    if ( !x ) return false ;
    var rx = /function/, ft = "function";
    switch (typeof x) {
        case ft: return true;
        case "object":
            if ((ft !== typeof x.toString) &&
                (ft !== typeof x.valueOf))
                try { return rx.test(x); } catch (x) { return false; }
            else
                return Object.prototype.toString.call(x) === "[object Function]";
            break;
        default: return false;
    }
}

function createDistrictStore() {
	if (!globalDistrictStore) {
		globalDistrictStore = new Ext.data.SimpleStore({
			fields : ['typeId', 'type'],
			id : 0,
			data : [
			   ['1', 'Центральный Федеральный округ'],
			   ['2', 'Северо-Западный Федеральный округ'],
			   ['3', 'Приволжский Федеральный округ'],
			   ['4', 'Южный Федеральный округ'],
			   ['5', 'Уральский Федеральный округ'],
         	   ['6', 'Сибирский Федеральный округ'],
         	   ['7', 'Дальневосточный Федеральный округ'],
         	   ['8', 'Иностранные представительства']]
		});
	}
	return globalDistrictStore;
}

function incDate(date,dayNum) { 
	var newDate = new Date(date.getTime());
	var hours = date.getHours(); 
	newDate.setHours(hours+(24*dayNum), 0, 0, 0); 
	newDate.setHours(0);
	
	return newDate;
}

function decDate(date,dayNum) { 
	var newDate = new Date(date.getTime());
	var hours = date.getHours(); 
	newDate.setHours(hours-(24*dayNum), 0, 0, 0); 
	newDate.setHours(0);
	
	return newDate;
}

// image viewer
Ext.BLANK_SRO_IMG = '';
Ext.ux.Image = Ext.extend(Ext.BoxComponent, {
   url : Ext.BLANK_SRO_IMG,  //for initial src value

   imgAlt: '', // by default

   imgWidth: 0, // by default

   imgHeight: 0, // by default

   /**
	* html element
    */
   autoEl: {
		tag: 'img',
		alt: '',
        src: Ext.BLANK_SRO_IMG,
        width: 200,
		height: 200,
        cls: 'tng-managed-image'
   },
   
   initComponent : function(){
         Ext.ux.Image.superclass.initComponent.call(this);
         this.addEvents('load');
   },
   
   onRender: function() {
	   Ext.ux.Image.superclass.onRender.apply(this, arguments);

       this.el.on('load', this.onLoad, this);
       
       if(this.url) {
    	   this.setSrc(this.url);
       }
       
       if(this.imgAlt) {
    	   this.setAlt(this.imgAlt);
       }
       
       if(this.imgHeight) {
    	   this.setHeight(this.imgHeight);
       }
       
       if(this.imgWidth) {
    	   this.setWidth(this.imgWidth);
       }
   },
 
   onLoad: function() {
	   this.fireEvent('load', this);
   },
 
   setSrc: function(src) {
	   this.el.dom.src = src;
   },
   
   setWidth: function(width) {
	   this.el.dom.width = width;
   },
   
   setHeight: function(height) {
	   this.el.dom.height = height;
   },
   
   setAlt: function(alt) {
	   this.el.dom.alt = alt;
   }
});

function sharePicturesStore(){
	if(!gloabalPicturesStore){
		var connObj = new Ext.data.Connection({
	        timeout : 320000,
	        url : '../xml?get=picturesList',
	        method : 'POST'
	    });
		
		gloabalPicturesStore = new Ext.data.Store({
			proxy : new Ext.data.HttpProxy(connObj),
			reader : new Ext.data.XmlReader({
				record : 'f',
				idProperty : 'id'
			}, fileType())
	    });
	}
	return gloabalPicturesStore;
}

function sroTip(event) {	
	var button;
	if (event.which == null) {
	    /* IE case */
		button= (event.button < 2) ? 'LEFT' : ((event.button == 4) ? 'MIDDLE' : 'RIGHT');
	}
	else {
	    /* FireFox */
		button= (event.which < 2) ? 'LEFT' : ((event.which == 2) ? 'MIDDLE' : 'RIGHT');
	}
	
	if ( button == 'LEFT') {
		Tip('<span style="float:left; padding: 2px 5px 0px 2px; text-align: center;">' +
			'<img alt="sro-s.ru" src="images/favicon.ico"/></span>' +
			'<span style="float:right;">Условие использования материалов - ссылка на <b>sro-s.ru</b>.<br/>' +
			'При использовании информации в интернете -<br/>'+
			'гиперссылка на соответствующую страницу сайта <b>sro-s.ru</b>.</span>',
			BGCOLOR,
			'#ececec',
			BORDERCOLOR,
			'#eeeeee');
	}
}

// this object used to group any stores and calls specified handler when 
// all of them have been loaded.
Ext.ux.StoreAdjustor = function(config) {
	var me = this;
	
	me.stores = [],
	me.handler = null,
	me.counter = 0;
	me.loadHandler = function(store) {
		me.counter++;
		if (me.counter == me.stores.length) {
			if (me.handler) {
				me.handler();
				me.counter = 0;
			}
		}
	};
	
	Ext.apply(me, config);
};

Ext.ux.StoreAdjustor.prototype = {
	enable : function() {
		this.disable();
		if (this.stores) {
			for (i = 0; i < this.stores.length; i++) {
				this.stores[i].on('load', this.loadHandler);	
			}
		}
	},
	
	disable : function() {
		if (this.stores) {
			for (i = 0; i < this.stores.length; i++) {
				this.stores[i].removeListener('load', this.loadHandler);	
			}
		}
	}
};

function incBannerShowCount(bannerId, locId) {
	Banner2LocationDao.incShowCount(bannerId, locId);
}
