function camaoAdsense(){
	var ad_setting_string = "";
	var templateID;
	var outputArray;
    var outputTableArray = false;
	var outputID;
	var outputPos = 0;
	var maxOutput;
	var callbackcode;
	var adtype = "afs";
    var outputTarget = false;
    var outputTargetTrs;
    var hoverClass = false;

    var recivedAd = false;

	this.$ = function(id){
		return document.getElementById(id);
	}

	this.setType = function(atype){
		adtype = atype;
		if (adtype == "afc"){
			ad_setting_string = "google_ad_output = 'js';";
		}

	}

    this.setHoverClass = function(classname){
        hoverClass = classname;
    }

    this.setTableTarget = function(target){
        outputTarget = target;
        if (arguments[1]){
            outputTargetTrs = outputTarget.select(arguments[1]);
        }else{
            outputTargetTrs = outputTarget.select("tr");
        }
    }

	this.setCallback = function(callback){
		callbackcode = callback;
	}

	this.select = function(element, str){
		var Rx= RegExp('\\b'+str+'\\b');
		var who, i= 0, A= [], tem, temp;
		var G= element.getElementsByTagName('*');
		while(G[i]){
			tem= G[i++];
			temp=tem.className|| '';
			if(Rx.test(temp)) A.push(tem);
		}
		return A;
	}

	this.setTemplateID = function(id){ templateID = id; }

	this.setOutputArray = function(arr){ outputArray = arr; }
    this.setTableRowNumberForOutput = function(arr){ outputTableArray = arr; }
	this.setOutputID = function(id){ outputID = id; }
	this.setOutputMax = function(count){ 
        maxOutput = count - 1;
        if (adtype == "afc"){

            ad_setting_string += "\n" + "google_max_num_ads = '" + count + "';";
        }

    }

	this.setKeyword = function(keyword){ 
		if (adtype == "afs"){
			ad_setting_string += "\n" + "google_afs_query = '" + keyword + "';";
		}else{
			ad_setting_string += "\n" + "google_kw_type = 'broad';";
			ad_setting_string += "\n" + "google_kw = '" + keyword + "';";

		}
	}

	this.setGoogleSetting = function(holder, value){
		ad_setting_string += "\n" + holder + " = '" + value + "';";
	}

	this.createSettingsScript = function(){
        document.write("<script type='text/Javascript'>" + ad_setting_string + "</script>");

		if (adtype == "afc"){
	   //     document.write('<script language="JavaScript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>');
			ad_setting_string = "google_ad_output = 'js';";
		}
	}

	this.getAFCAdsense = function(){

		camaoAdsenseObj.createSettingsScript();
		document.write('<script language="javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>');
	}

	this.getAFSAdsense = function(){
		camaoAdsenseObj.createSettingsScript();
		document.write('<script language="javascript" src="http://www.google.com/afsonline/show_afs_ads.js"></script>');
	}

	this.receiveAFCAdsense = function(adsense){
        recivedAd = adsense;
        camaoAdsenseObj.insertAdsense(adsense);
	}

    this.insertAdsense = function(adsense){
        leave = false;
        for (var i = 0; i < adsense.length; i++){
            e = adsense[i];
            //Wir haben alle Container gefuellt
            if (leave == true){
                if (callbackcode){
                    eval(callbackcode);
                    callbackcode = "";
                }
                return false;
            }

            cloned = camaoAdsenseObj.$(templateID).cloneNode(true);
            cloned.id = "";for (x = 0; x < 15; x++){ e.url = e.url.replace("&amp;","&"); }


            camaoAdsenseObj.select(cloned, templateID + "-visible_url")[0].innerHTML = e.line1;
            camaoAdsenseObj.select(cloned, templateID + "-url")[0].href = e.url;
            camaoAdsenseObj.select(cloned, templateID + "-url")[0].target = "_blank";

            camaoAdsenseObj.select(cloned, templateID + "-line2")[0].innerHTML = e.line2;
            if (e.line3){
                camaoAdsenseObj.select(cloned, templateID + "-line3")[0].innerHTML = e.line3;
            }else{
                camaoAdsenseObj.select(cloned, templateID + "-line3")[0].innerHTML = "";
            }

            camaoAdsenseObj.select(cloned, templateID + "-visible_url")[1].innerHTML = e.visible_url;
            camaoAdsenseObj.select(cloned, templateID + "-url2")[0].href = e.url;
            camaoAdsenseObj.select(cloned, templateID + "-url2")[0].target = "_blank";
            cloned.style.display = "";


            if (hoverClass != false){
                cloned.onmouseover = function(){ this.className = this.className + " " + hoverClass; }
                cloned.onmouseout = function(){ this.className = this.className.replace(" " + hoverClass,""); }
            }


            //Wir haben ein Array an Targets bekommen
            if (outputTableArray == false){
                try{
                    camaoAdsenseObj.$(outputArray[outputPos]).innerHTML = "";
                    if (outputArray[0]){
                        camaoAdsenseObj.$(outputArray[outputPos]).appendChild(cloned);
                        outputPos++;
                        if ( (outputPos == maxOutput) || (outputPos == adsense.length) ){
                            leave = true;
                        }
                    }else{
                        camaoAdsenseObj.$(outputID).appendChild(cloned);
                    }
                }catch(e){
                    if (maxOutput >= i){
                        camaoAdsenseObj.$(outputID).appendChild(cloned);
                    }
                }
            }else{
                if (outputTableArray[outputPos]){

                    pos = outputTableArray[outputPos];
                    element = outputTargetTrs[pos];
                    if (pos + 1 == outputTargetTrs.length){
                        element.up().appendChild(cloned);
                    }else{
                        element.insert({ before:cloned});
                    }
                    outputPos++;
                    if ( (outputPos == outputTableArray.length) || (outputPos == adsense.length - 1) ){
                        leave = true;
                    }
                }
            }

        }

        if (callbackcode){
            eval(callbackcode);
            callbackcode = "";
        }

        //Wir loeschen das Template da wir es nicht mehr brauchen
        //camaoAdsenseObj.afterFinsishInserting();
    }

	this.receiveAFSAdsense = function(adsense){
        recivedAd = adsense;
        camaoAdsenseObj.insertAdsense(adsense);
	}

	this.afterFinsishInserting = function(){
		//Wir brauchen das Template nicht mehr
		camaoAdsenseObj.$(templateID).remove();
	}

    this.restoreAdsense = function(){
        if (recivedAd != false){
            outputPos = 0;
            camaoAdsenseObj.insertAdsense(recivedAd);
        }
    }

}




function google_ad_request_done (google_ads) { camaoAdsenseObj.receiveAFCAdsense(google_ads);  }
function google_afs_request_done(google_ads) { camaoAdsenseObj.receiveAFSAdsense(google_ads); }

