function camaoAdsense(){
    var outputTableArray = false;
    var camaoAd = {};

    this.init = function(options){
        camaoAd.setting_string = "google_ad_output = 'js';";
        camaoAd.type = options.type || "afc";

        if (options.keyword){
            if (camaoAd.type == "afs"){
                camaoAd.setting_string += "\n" + "google_afs_query = '" + options.keyword + "';";
            }else{
                camaoAd.setting_string += "\n" + "google_kw_type = 'broad';";
                camaoAd.setting_string += "\n" + "google_kw = '" + options.keyword + "';";
            }
        }

        if (options.output){
            camaoAd.outputArray = options.output;
            this.setOutputMax(camaoAd.outputArray.length);
            camaoAd.outputTableArray = false;
        }

        camaoAd.callbackcode = options.callback || false;

        camaoAd.hoverClass = options.hover || false;
        camaoAd.speach = options.language || "de";
        camaoAd.templateID = options.templateID || "adsense";
        camaoAd.setting_string += "\n" + "google_ad_client = '" + options.pubid + "';";
        camaoAd.setting_string += "\n" + "google_ad_channel = '" + options.channel + "';";
        camaoAd.outputPos = 0;

        camaoAd.target = options.target || "_blank";

        this.getAFCAdsense();
    }

	this.setOutputID = function(id){ camaoAd.outputID = id; }

	this.setOutputMax = function(count){ 
        camaoAd.maxOutput = count;
        if (camaoAd.type == "afc"){
            camaoAd.setting_string += "\n" + "google_max_num_ads = '" + count + "';";
        }else{
            camaoAd.setting_string += "\n" + "google_afs_ad = 'w" + count + "';";
        }
    }

	this.setGoogleSetting = function(holder, value){ camaoAd.setting_string += "\n" + holder + " = '" + value + "';"; }

	this.createSettingsScript = function(){ document.write("<script type='text/Javascript'>" + camaoAd.setting_string + "</script>"); }

	this.getAFCAdsense = function(){
        camaoAd.setting_string += "\n" + "google_language = '" + camaoAd.speach + "';";
		camaoAdsenseObj.createSettingsScript();
		document.write('<script language="javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>');
	}

	this.getAFSAdsense = function(){
        camaoAd.setting_string += "\n" + "google_feedback = 'on';";
        camaoAd.setting_string += "\n" + "google_encoding = 'latin1';";
        camaoAd.setting_string += "\n" + "google_ad_section = 'default';";
            camaoAd.setting_string += "\n" + "google_afs_hl = '" + camaoAd.speach + "';";
            camaoAd.setting_string += "\n" + "google_afs_gl = '" + camaoAd.speach + "';";

		camaoAdsenseObj.createSettingsScript();
		document.write('<script language="javascript" src="http://www.google.com/afsonline/show_afs_ads.js"></script>');
	}

	this.receiveAFCAdsense = function(adsense){
        camaoAd.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 (camaoAd.callbackcode){
                    eval(camaoAd.callbackcode);
                    camaoAd.callbackcode = "";
                }
                return false;
            }

            cloned = camaoAdsenseObj.$(camaoAd.templateID).cloneNode(true);
            cloned.id = "";

            e.url = e.url.replace("&amp;","&");
            e.url = e.url.replace("&amp;","&");
            e.url = e.url.replace("&amp;","&");
            e.url = e.url.replace("&amp;","&");
            e.url = e.url.replace("&amp;","&");
            e.url = e.url.replace("&amp;","&");
            e.url = e.url.replace("&amp;","&");
            e.url = e.url.replace("&amp;","&");
            e.url = e.url.replace("&amp;","&");
            e.url = e.url.replace("&amp;","&");
            e.url = e.url.replace("&amp;","&");
            e.url = e.url.replace("&amp;","&");
            e.url = e.url.replace("&amp;","&");
            e.url = e.url.replace("&amp;","&");

            camaoAdsenseObj.select(cloned, camaoAd.templateID + "-visible_url")[0].innerHTML = e.line1;
            camaoAdsenseObj.select(cloned, camaoAd.templateID + "-url")[0].href = e.url.replace("&amp;","&");
            camaoAdsenseObj.select(cloned, camaoAd.templateID + "-url")[0].target = camaoAd.target;



            camaoAdsenseObj.select(cloned, camaoAd.templateID + "-line2")[0].innerHTML = e.line2;
            if (e.line3){
                camaoAdsenseObj.select(cloned, camaoAd.templateID + "-line3")[0].innerHTML = e.line3;
            }else{
                camaoAdsenseObj.select(cloned, camaoAd.templateID + "-line3")[0].innerHTML = "";
            }

            camaoAdsenseObj.select(cloned, camaoAd.templateID + "-visible_url")[1].innerHTML = e.visible_url;
            camaoAdsenseObj.select(cloned, camaoAd.templateID + "-url2")[0].href = e.url;
            camaoAdsenseObj.select(cloned, camaoAd.templateID + "-url2")[0].target = camaoAd.target;


            cloned.style.display = "";

            if (camaoAd.hoverClass != false){
                cloned.onmouseover = function(){ this.className = this.className + " " + camaoAd.hoverClass; }
                cloned.onmouseout = function(){ this.className = this.className.replace(" " + camaoAd.hoverClass,""); }
            }

            //Wir haben ein Array an Targets bekommen
            try{
                camaoAdsenseObj.$(camaoAd.outputArray[camaoAd.outputPos]).innerHTML = "";
                if (camaoAd.outputArray[0]){
                    camaoAdsenseObj.$(camaoAd.outputArray[camaoAd.outputPos]).appendChild(cloned);
                    camaoAd.outputPos++;
                    if ( (camaoAd.outputPos == camaoAd.maxOutput) || (camaoAd.outputPos == adsense.length) ){
                        leave = true;
                    }
                }else{
                    camaoAdsenseObj.$(camaoAd.outputID).appendChild(cloned);
                }
            }catch(e){
                if (camaoAd.maxOutput >= i){
                    if (camaoAdsenseObj.$(camaoAd.outputID)) camaoAdsenseObj.$(camaoAd.outputID).appendChild(cloned);
                }
            }
        }

        if (camaoAd.callbackcode){
            eval(camaoAd.callbackcode);
            camaoAd.callbackcode = "";
        }
    }

	this.receiveAFSAdsense = function(adsense){
        camaoAd.recivedAd = adsense;
        camaoAdsenseObj.insertAdsense(adsense);
	}

    this.restoreAdsense = function(){
        if (camaoAd.recivedAd != false){
            camaoAd.outputPos = 0;
            camaoAdsenseObj.insertAdsense(camaoAd.recivedAd);
        }
    }


    //Helper Functions
    this.$ = function(id){ return document.getElementById(id); }
    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;
    }
}




function google_ad_request_done (google_ads) { camaoAdsenseObj.receiveAFCAdsense(google_ads);  }
function google_afs_request_done(google_ads) { camaoAdsenseObj.receiveAFSAdsense(google_ads); }
