/*------------------------------------------------------------------------------------------------*/
function debug(val) {
//	if (window.console) {
//		 console.debug(val);
//	}
}
/*------------------------------------------------------------------------------------------------*/

function getBezirkIdByArea(areaId) {
	return $('#m' + areaId).parent('div').attr('id').substring(1);
}

function getRegionIdByBezirk(bezirkId) {
	return $('#regs span[alt ~= "' + bezirkId + '"]').attr('id').substring(1);
}

function getRegionIdByArea(areaId) {
	return getRegionIdByBezirk(getBezirkIdByArea(areaId));
}

/*------------------------------------------------------------------------------------------------*/

function in_array(el, check_array) {
	for (check_el in check_array) {
		if (check_array[check_el] == el) 
			return true;
	}
	return false;
}

function array_unique( array ) {    
    var key = '', tmp_arr1 = {}, tmp_arr2 = {};
    var val = '';
    tmp_arr1 = array;
    
  var __array_search = function (needle, haystack, strict) {
        var fkey = '';
      var strict = !!strict;
      for (fkey in haystack) {
          if ((strict && haystack[fkey] === needle) || (!strict && haystack[fkey] == needle) ) {
              return fkey;
          }
      }
      return false;
  }    
  
    for (key in tmp_arr1) {
        val = tmp_arr1[key];
        if (false === __array_search(val, tmp_arr2)) {
            tmp_arr2[key] = val;
        }
        
        delete tmp_arr1[key];
    }
    
    return tmp_arr2;
}
/*------------------------------------------------------------------------------------------------*/

function isset(v) {
	return (typeof(v)=='undefined' || v===null) ? false : true; 
}

/*------------------------------------------------------------------------------------------------*/
function isBelongTo(str, bezirkId) {
//	debug('[belog check] ' + str + ' => ' + bezirkId);
	for(var j=0; j<RegCity[bezirkId].length; j++) {
		if(str == RegCity[bezirkId][j]) return true;
	}
	return false;
}

function getRegionNameByBezirkId (bezirkId) {
	return $('#regs span[alt ~= "' + bezirkId + '"]').attr('title');
}

/*------------------------------------------------------------------------------------------------*/

var regList = ''; // string with list of regions divided by comma
var regListExt=new Array(); // array of regions 'lowercase of name ' => 'ID'

var RegCity = new Array();
var tm;

function getIdFromHref(str) { var p=str.indexOf('#'); return (p) ? str.substring(p+1) : 0; }

function getRegDefault() {
	return ($('#def_reg_val').text());
}

function regionList() {
	regList=',';
	$('div#bezirks a img').each(function(e) {
		regList +=this.title.toLocaleLowerCase()+',';
		regListExt[this.title.toLocaleLowerCase()] = this.id;
	});
	$('area').each(function(e) {
		var internal_list = this.title.toLocaleLowerCase().split(/\s*,\s*/);
		var i;
		for (i in internal_list) {
			if (internal_list[i].length) {
				regList += internal_list[i] + ',';
				regListExt[internal_list[i]] = this.id;
			}
		}
	});	
}



function regEscape(str) {
	return str.replace('\(', '\\(').replace('\)', '\\)');	
}

function txt2map() {
//function setRegMap() {
	// region string ended by comma? (case after autocomplete), no = stop
//	if (!$('#regions').val().match(/,\s*$/) && $('#regions').val() != '') return;
	
	var regArr = $('#regions').val().toLocaleLowerCase().split(/\s*,\s*/);
	
	// hide all blue images
	$('div#inimages img').hide();
	
	// highlight selected areas on map
	var search_str;

	for(var i=0;i<regArr.length;i++){
		search_str = regArr[i];
		if (search_str.length == 0) continue;
		debug( search_str.length + " | " + search_str);
		
		var r=getRegion(search_str);
		if (r) {
			hl_bezirks(r);
			continue;
		}
		var b = getBezirk(search_str);
		if (b) {
			hl_bezirks(b);
			continue;
		}
		if(regList.search(',' + regEscape(search_str) + ',')>=0) {
			$('#m'+regListExt[search_str].substring(1)).show();
		}
	}
}


/*------------------------------------------------------------------------------------------------*/
// Region

function getRegion(str) {
	var bezlist='';
	$('#regs span').each(function() {
		if ($(this).attr('title').toLowerCase() == str)
			bezlist = $(this).attr('alt'); 
	});
	return (bezlist.length) ? bezlist.split(/\s*,\s*/) : false;
}

function getBezirk(str) {
	var bezlist='';
	$('#bezirks img').each(function() {
		if ($(this).attr('title').toLowerCase() == str)
			bezlist = $(this).attr('alt'); 
	});
	return (bezlist.length) ? bezlist.split(/\s*,\s*/) : false;
}

function hl_bezirks(list) {
	for (b in list)
		hl_bezirk(list[b]);
}

function hl_bezirk(bezNumber) {
	$('#r'+bezNumber+' img').show();
}

/*------------------------------------------------------------------------------------------------*/


$(document).ready(function(){
    $('#inimages img').each(function(e) {
        var aa = this.alt.split(',');  
        this.style.marginTop = aa[0] + 'px';
        this.style.marginLeft = aa[1] + 'px';
    });
    
    $('#inimages div').each(function(){
    	reg_id = this.id.substr(1);
    	var  i=0;
    	RegCity[reg_id] = new Array();
    	$('#r'+reg_id+' img').each(function(){
			var internal_list = $("#a"+this.id.substr(1)).attr('title').toLocaleLowerCase().split(/\s*,\s*/);
			var ind;
			for (ind in internal_list) {
				if (internal_list[ind].length) {
					RegCity[reg_id][i] = internal_list[ind];
					i++;
				}
			}
    	}); 
    });
    
    //----------------------------------------------------------------------------------------------
    // click to gemeinden
    //----------------------------------------------------------------------------------------------

    $('area').click(function(e) {
    	var areaId 	 = getIdFromHref(this.href);
    	var bezirkId = getBezirkIdByArea(areaId);
    	var regionId = getRegionIdByBezirk(bezirkId);
    	
    	debug(' >> area: ' + areaId);
    	debug(' >> bez : ' + bezirkId);
    	debug(' >> reg : ' + regionId);
    	
        $('#m'+getIdFromHref(this.href)).toggle();
    	
        var regions='';
    	var regArr= new Array;
    	var regArrOreg= new Array;
    	var regArrAdd= new Array;
    	var reg_id = $('#m'+this.id.substr(1)).parent().attr('id').substr(1);
    	var reg_alt = $('#b'+reg_id).attr('title');

    	//get cities of region in lowercase and original view
    	var regArr = RegCity[reg_id]; 
    	$('#r'+reg_id).children().each(function(e){
    		regArrOreg.push($("#a"+this.id.substr(1)).attr('title'));
    		regArrAdd.push($(this).is(':visible'));	
    	});

    	var old_reg = $('#regions').attr('value');
    	var old_regArr = old_reg.split(/\s*,\s*/);
    	var search_str;
    	var find;
    	if($("#r"+reg_id+" img").length == $("#r"+reg_id+" img:visible").length) {
    		for(var i=0;i<old_regArr.length;i++){
    			if (old_regArr[i] == "") continue;
    			search_str = old_regArr[i].toLowerCase();
    			oreg_str = old_regArr[i];
    			find = -1;
    			for(var j=0;j<regArr.length;j++){
    				if(search_str == regArr[j]) find = j;
    			}
    			if(find<0)
    				regions += oreg_str+', ';
    		}
    		regions += reg_alt+', ';
    		is_add = false;	
    	} else {
//    		debug(old_regArr);
    		for(var i=0;i<old_regArr.length;i++){
    			if (old_regArr[i] == "") continue;
    			search_str = old_regArr[i].toLowerCase();
    			oreg_str = old_regArr[i];
    			if(search_str != reg_alt.toLowerCase()) {
    				find = -1;
    				for(var j=0;j<regArr.length;j++){
    					if(search_str == regArr[j]) find = j;
    				}
    				if(find<0 && search_str) {
    					regions += oreg_str+', ';
    				} else {
    					if(regArrAdd[find]) {
    						regions += oreg_str+', ';
    						regArrAdd[find] = false;
    					}
    				}
    			}
    		}
    		for(i=0;i<regArrOreg.length;i++){
    			if(regArrAdd[i])
    			regions += regArrOreg[i]+', ';
    		}
    	}
    	regions = regions.replace(/,[\s]*$/,'');
    	$('#regions').attr('value',regions);
    	//checkRegsEmpty();
        
        $('#regions').focus();
        return (false);
    });
    //----------------------------------------------------------------------------------------------

    
    $('#regions').change(function(e) {
    	txt2map();
    });

    $('#regions').keyup(function(e) {
    	tm=setTimeout("txt2map()", 1000);
    });

    $('#regions').keydown(function(e) {
		if (tm) clearTimeout(tm);
    });

    //----------------------------------------------------------------------------------------------
    // click to bezirk
    //----------------------------------------------------------------------------------------------
    $('#bezirks A').click(function(e) {
    	var bezirkId = getIdFromHref(this.href);
    	var is_add = false;
    	var b, xreg;
        if (($('#r' + bezirkId + ' img:hidden').length) > 0) {
        	is_add = true;
            $('#r' + bezirkId + ' img').show();
        } else {
            $('#r' + bezirkId + ' img').hide();
        }
        
        var myreg = getRegionNameByBezirkId(bezirkId);
    	var regions='';
    	var str='';
    	var regArr = RegCity[bezirkId]; 
    	var reg 	= $(this).children().attr('title');
    	
    	var old_reg = $('#regions').val().replace(/,[\s]*$/,'');
    	var old_regArr = old_reg.split(/\s*,\s*/);

    	var search_str,oreg_str;
    	var find;
    	
    	var usedMyRegion = false;
    	var found_bezirks = new Array();
    	
    	for(var i=0; i<old_regArr.length; i++) {
    		search_str = old_regArr[i].toLowerCase();
    		
    		if (isBelongTo(search_str, bezirkId)) {
    			continue;
    		}
    		
    		if (myreg.toLowerCase() == search_str) {
    			usedMyRegion = true;
    		}
    		
    		b = getBezirk(search_str);
    		if (b && b[0] != bezirkId) {
    			found_bezirks[found_bezirks.length] = b[0];
    		}
    		
			if(search_str != reg.toLowerCase() && search_str.length) {
				regions += old_regArr[i] + ', ';
			}
    	}
    	
    	found_bezirks[found_bezirks.length] = bezirkId;
		var list = getRegion(myreg.toLowerCase());
    	
    	if(is_add) {
    		// check... maybe now organized region (several bezirks)
    		// get my region
    		
    		var isConvertToRegion = true;
    		for (bez in list) {
    			if (!in_array(list[bez], found_bezirks)) {
    				isConvertToRegion = false;
    				break;
    			}
    		}
    		if (isConvertToRegion) {
    			xreg = regions.split(/\s*,\s*/);
    			regions = '';
    			for (xx in xreg) {
    				if (xreg[xx].length==0) continue;
    				b = getBezirk(xreg[xx].toLowerCase());
    				if (b && in_array(b[0], list)) continue;
    				regions += xreg[xx] + ', ';
    			}
    			reg = myreg;
    		}
    		regions += reg + ', ';
    	} else if (usedMyRegion){
			xreg = regions.split(/\s*,\s*/);
			regions = '';
			for (xx in xreg) {
				if (xreg[xx].length==0 || myreg.toLowerCase() == xreg[xx].toLowerCase()) continue;
				regions += xreg[xx] + ', ';
			}
			for (bez in list) {
    			if (list[bez] != bezirkId) {
    				regions += $('#b'+list[bez]).attr('title') + ', ';
    			}
    		}
    	}

    	$('#regions').attr('value',regions);
        
        $('#regions').focus();
        return (false);
    });
    //----------------------------------------------------------------------------------------------

    regionList();
    txt2map();
});