var debug = 0;
var SITE_URL = '/krutilka-proxy';

var ContextAd ={};

ContextAd.Sites = {
			PRICE:     4,
			DOMOTEKA:  7,
			TYNDEX:    1,
			MED:       2,
			FERRA:     8
		};

ContextAd.Flags = {
			PRICE_RETAIL:     2,
			PRICE_WHOLESALE:  1,
			PRICE_MEDIA:      4
		};

ContextAd.Types = {
     PRIVILEGED_INFOBLOCK:    1, // приоритет
	 SKYSCRAPER:              2, 
	 INFOBLOCK:               3, // неприоритет
	 SEARCH_BUTTON:           4, 
	 POPUNDER:                5,

	 HOMEPAGE_INFOBLOCK:      6, // main
	 HOMEPAGE_SKYSCRAPER:     7, // 240 на 400
	 HOMEPAGE_POPUNDER:       11,

	 CITY_INFOBLOCK:          8, // city1
	 CITY_SKYSCRAPER:         9,
	 CITY_BUTTON:             10,// city2
	 CITY_BANNER:             14,

	 SERVICE_INFOBLOCK:       12,

	 DEFAULT_BANNER:          13,
	 PROFCLUB_BANNER:         15,
	 CTGRLIST_BUTTON:         16,
	 MEDIA:                   17, // mediacontext
	 USR1:                    19,
	 USR2:                    20,
	 USR3:                    21,
	 CITY_SEARCH:             22,
	 WHOLESALE_BANNER:        23,
	 USLUGI_TIRE_TOP:         24,
	 CATEG_INFOBLOCK:         25, // банер в категории 
	 NEWYEAR:                 26,

	 FERRA_MAIN:              27,
	 FERRA_RAZDEL:            28,
	 FERRA_ARTICLE:           29,
	 FERRA_MAINSQUARE:        30,
	 FERRA_UHI:               31,
	 FERRA_COMMERCE:          32,
	 FERRA_VERTELKA:          33
 };

function Krutilka( params ) {
	params = params || {}
	this.params = params
	this.count = { };
	this.__ready = false
}


Krutilka.prototype.write = function( id ){
	var data = this.getNextAd( id )
	if( data ){
		if( ! this.count ){
		      this.count = { };
		}
		if( !this.count[ id ] ){
			this.count[ id ] = 0;
		}
		
		this.count[ id ] = this.count[ id ] + 1;

		document.write( data );
		return 1;
	}
	return 0;
}


Krutilka.prototype.hasAd = function( type ) {

	if( !type && debug ) {
		alert( 'ContextAd::Manager::hasAd: No ad type supplied');
		return;
	}

	if( this.__types__ && this.__types__[ type ] ){
		var n=0;
		for (i=0; i < this.__types__[type].length; i++){
			if( this.__ads__[  this.__types__[type][i] ] ){
				n++;
			}
		}
		return n;

	} else {
		return 0;
	}

}

Krutilka.prototype.getNextAd = function( type ) {

	if( !type && debug ) {
		alert( 'ContextAd::Manager::getNextAd: No ad type supplied');
		return;
	}
	
	if( !this.__types__[ type ] ){
		return;
	}

	var queue = this.__types__[ type ];
	var ad;


	while(  queue.length ) {

		var id =  queue.shift();
		ad = this.__ads__[id];
		if( ad ){
			delete this.__ads__[ id ];
			break;
		}
	}

	if( !ad ){
		return;
	}

	return ad;
}

Krutilka.prototype.getAd = function(id){
		var ad = this.__ads__[id];

	        delete this.__ads__[$id];

		return ad;
}

Krutilka.prototype.load = function() {
	var params = this.params
	
	this.__context__  = params.context || '';
	this.__city__     = params.city || 0;

	this.__caid__     = params.caid || 0;
	this.__site__     = params.site || 0;
	this.__script__   = params.script || '';
	this.__flag__     = params.flag || 0;
	this.__types__    = {};
	this.__ads__      = {};

	this.__ip__       = params.ip ;
	this.__req_uri__  = params.req_uri;
	
	if( !params.request && debug) {
		alert('ContextAd::Manager::new:  No request supplied');
	}

	var req = params.request;

	if(req) {
		this.__request__ = req;
		this.__getRemoteData();
	}
}

Krutilka.prototype.onSuccess = function(data){

	if(!data){
		return;
	}

	var arr_data = data.split( "\n" );

	for (i=0; i < arr_data.length; i++){
		var str = arr_data[i] + '';
		var arr_str = str.split("\t");

		var id   = arr_str[0];
		var type = arr_str[1];
		var txt  = arr_str[2];

		if( !(type && type > 0) ){
			continue;
		}

		this.__ads__[id] = txt;

		if(!this.__types__[type] ){
			this.__types__[type] = [];
		}	
		//alert("type:" + type + ' id:' + id)
		this.__types__[type].push(id);
	}

	//this.callback_func();
}

Krutilka.prototype.__getRequestUrlParams = function(){

	var context = this.__context__;

	var re = /(prodlist|ctgrlist)/gi;
	context.replace(re,"");
	var re = /(^ {1,}| {1,}$)/gi;
	context.replace(re,"");


	var ip      = this.__ip__;//$ENV{'REMOTE_ADDR'} || '127.0.0.1';
	var req_url = this.__req_uri__;

	var list = '';

	for (i=0; i < this.__request__.length; i++){
	
		var req = this.__request__[i];

		if( !req ){
			continue;
		}

		if(!req['number'] ) {
			req['number'] = 1;
		}

		if(!req.context_only){
			req.context_only = 0;
		}

		if(!req.use_relev){
			req.use_relev = 0;
		}
	
		var arr =  [req.type , req['number'] , req.context_only, req.use_relev ];

		list = list + arr.join(':') + ';';

	}

	if ( ! this.__script__ ) {

		if ( req_url == '/' || req_url.match(/index\.html/) ) {
			this.__script__ = 'index';
		} else {
			this.__script__ = 'other';
		}

	}

	var query_params = {
		    pnam: context ,
		    ctor: this.__city__,
		    site: this.__site__,
	   	    ip: ip,
	            list: list,
	            mask: this.__flag__,
	            script: this.__script__,
		    caid: this.__caid__,
	            url: req_url 
		};

	return query_params;
}

Krutilka.prototype.__getRemoteData = function(){
	var kr = this;
    $.ajax({
		async: false,
		cache: false,
		url: SITE_URL,
		data: kr.__getRequestUrlParams(),
		dataType : "text",
		success: function (remote_data) { 
			kr.onSuccess(remote_data);
		},  
		beforeSend: function(){  },
		error:   function( ){   }
	});
	return;
}

