/***

    CAMAO Adsense Klasse zum verwalten von Google Werbung (c) CAMAO 2009
    V0.1 - v2.1.2 Matthias Friedrich

    Beschreibung :
	Dieses Script verarbeitet und verwaltet die komplette Adsense Ausgabe auf der Webseite.
	Durch Angaben von Benutzer definierten Keywords ist es moeglich gezielt Werbung anzufragen.
	Liefert Google mit einem Keyword keine Werbung kann man ein 'Fallback' Keyword angeben,
	sollte auch hier keine Werbung kommen, ist es auch moeglich den Container, mit HTML
	Code zu fuellen bzw falls kein HTML Code hinterlegt wurde, den Container zu entfernen.
	Unterschiedliche Zonen durch unterschiedlichen Channel IDs und Keywords mit Werbung
	zu fuellen ist auch moeglich.
	
    Generelle Info :
	Es wird ein Adsense Premium Pub-ID benoetigt!

    Changelog :
	17.08.2009	Recode des Codes
	19.08.2009	Code Cleanup (debug ausgaben in funktion zusammen gefasst)
			Template auswahl variable gestaltet
			AFC als Fallback eingestellt
			Dokumentation erweitert

    @Todos :
	- Pruefen ob der onload Event schneller sein kann als die Antworten von Google

    Class Instruktionen
    ############################

    Initialisierung
	(bool) camaoAdsenseObj.init(options);									
    
	Note : Es ist von vorteil wenn dieses Init-Script so frueh wie moeglich ausgefuehrt wird!
    Pflicht Optionen 
	pubid				Google Adsense PUB-ID						(string)
	*keyword			Beliebiges Keyword (Auto, Haus, Liebe ....)			(string)
	part1				Einstellungen fuer Zone 1					(object)
	    *keyword			Beliebiges Keyword (Auto, Haus, Liebe ....)			(string)
	    type			Ausgaben Type, afs oder afc (for search / for content)		(string)
	    container			Container fur die Ausgaben Einstellungen			(array[object])
		[elementID]		Bestimmt das Element an dem Werbung erscheinen soll		(object)

		Note : der [elementID] Teil sowie part1 kann beliebig oft wiederholt werden.

	* Gibt man das Keyword in der obersten Ebene an , bezieht sich das auf alle Zonen
	  Gibt man das Keyword in der Zonen Ebene an, bezieht sich das nur auf diese Zone

    Moegliche Optionen
	language			Gibt die Sprache der Werbung an (de,hu,ro,...)			(string)
	*template			Legt fest welches Template verwendet werden soll		(integer)
	part1				Siehe Pflicht Optionen
	    fallback_keyword		Falls Google mit dem Primaeren Keyword keine Werbung liefert,
					wird versucht mit diesem Keyword Werbung zu holen.

					Note : das fallback_keyword verursacht ein nachladen der Werbung von Google

	    hints			Gibt Google hilfe stellung bei der findung von Werbung,
					hier wird perkomma getrennt die keywords uebergeben		(string)

	    channel			Google Adsense Channel ID					(string)
	    *template			Legt fest welches Template verwendet werden soll		(integer)
	    container			Siehe Pflicht Optionen
		*template		Legt fest welches Template verwendet werden soll		(integer)
					kann hier ein ersatz keyword angegeben werden.
		[elementID]		Siehe Pflicht Optionen
		    fallback_html	Falls Google mit dem Primaeren und Secondary (falls angegeben)
					Keyword keine Werbung liefert, kann hier eine HTML Alternative
					angegeben werden						(string)

	* Gibt man das template in der obersten Ebene an , bezieht sich das auf alle Zonen
	  Gibt man das template in der Zonen Ebene an, bezieht sich das nur auf diese Zone

    Sonstiges 
	adsenseItemOver			Ist eine CSS Class die bei onmouseover geadded wird
					und bei onmouseout entfernt wird

    ############################


    Aufruf Beispiel :
    ############################

    camaoAdsenseObj.init({ 
	'pubid' : 'pub-5734750340876442',
	'keyword' : 'adsense',
	'part1' : {
	    'type' : 'afc',
	    'container' : [{
		    'template' : 1,
		    'adsense1' : {}
	    }]
	},
	'part2' : {
	    'type' : 'afc',
	    'keyword' : 'kleidung',
	    'container' : [{
		    'template' : 2,
		    'adsense2' : {}
		},{
		    'template' : 2,
		    'adsense3' : {}
		}]
	}
    });

    ############################

***/
var alreadyrunflag;
function camaoAdsense(){
    var ads = { 'callcount' : 0, 'recived' : [], 'noAds' : [] };
    var fallbacks = { 'language' : 'de' };
    var settings = { 'codierung' : 'utf8', 'usedTemplates' : [false, false, false,false,false], 'lastdoubleclicksurl' :  '', 'domReady' : false, 'defaultTemplate' : 1, 'hoverclass' : "adsenseItemOver"};
    var blockedAdsense = false;
    var activeAdsenseLoop = 1;

    this.init = function(options){
	try{
        useddoc = this.getDocumentHandler();
        ads.options = options;

	//Falls keine Sprache festgelegt wurde, wird die sprache anhand der Domain festgelegt
        if (!ads.options.language){
            if(window.location.host){
                hostname = window.location.host.split(".");
		switch(hostname[hostname.length - 1]){
		    case 'com':
			hostname = fallbacks.language;
			this.debug("Warning, com domain detected , use language " + fallbacks.language + "!");
			break;
		    case 'org':
			hostname = fallbacks.language;
			this.debug("Warning, org domain detected , use language " + fallbacks.language + "!");
			break;
		    case 'net':
			hostname = fallbacks.language;
			this.debug("Warning, net domain detected , use language " + fallbacks.language + "!");
			break;
		    default :
			hostname = fallbacks.language;
		}
                ads.options.language = hostname || fallbacks.language;
            }else{
                ads.options.language = fallbacks.language;
            }
            this.debug("Set Language to " + ads.options.language);
        }
        
        //Wir vordern die erste Werbung an
        this.getNextAdsense();

	//Wir warten mit dem Onload Event bis der Dom unsere elemente fertig geladen hat
        this.createOnloadEvent();
	return true;
	}catch(e){ return false;}
    }

    //Wir erstellen den Onload Event
    this.createOnloadEvent = function(){
        if (document.addEventListener) document.addEventListener("DOMContentLoaded", function(){alreadyrunflag=1; camaoAdsenseObj.domReadyEvent()}, false)
        else if (document.all && !window.opera){
            document.write('<script type="text/javascript" id="contentloadtag" defer="defer" src="javascript:void(0)"><\/script>');
            var contentloadtag = document.getElementById("contentloadtag");
            contentloadtag.onreadystatechange = function(){
                if (this.readyState=="complete"){
		    alreadyrunflag=1;
		    camaoAdsenseObj.domReadyEvent();
                }
            }
        }
        window.onload=function(){ setTimeout("if (!alreadyrunflag) camaoAdsenseObj.domReadyEvent()", 0); }
    }

    //Fordert die naechste Werbung anhand der Zone an
    this.getNextAdsense = function(){
        eval("part = ads.options.part" + activeAdsenseLoop + " || false;"); 
        if (part != false){
            this.debug("Using Ad Part :");
            this.debug(part);
            part.fallback = false;
            blockedAdsense = true;

            //Google resetet die Variablen , daher muesen wir sie immer wieder belegen
            this.createDefaultScript(part);
            this.createCallScript(part);
            this.getAdsense();
            activeAdsenseLoop++;
        }
    }

    //Wird ausgeloest wenn der DOM Fertig ist
    this.domReadyEvent = function(){
        this.createUsedTemplates();
        this.insertAdsense();
        settings.domReady = true;
    }

    //Erstellt die Default Variablen fuer die Werbung
    this.createDefaultScript = function(part){
	adtype = part.type || "afc";

        if (part.fallback == false){
            ads.output = "\n<script type='text/javascript'>";
        }else{
            ads.output = "";
        }
        ads.output += "\n" + "google_ad_output = 'js'";
        ads.output += "\n" + "google_feedback = 'on';";
        ads.output += "\n" + "google_language = '" + ads.options.language + "';";
        ads.output += "\n" + "google_encoding = '" + settings.codierung + "';";

        if (adtype == "afc"){
            ads.output += "\n" + "google_ad_client = '" + ads.options.pubid + "';";
            ads.output += "\n" + "google_ad_oe = '" + settings.codierung + "';";
            ads.output += "\n" + "google_ad_section = 'default';";
        }else{
            ads.output += "\n" + "google_afs_client = '" + ads.options.pubid + "';";
            ads.output += "\n" + "google_afs_oe = '" + settings.codierung + "';";
            ads.output += "\n" + "google_afs_hl = '" + ads.options.language + "';";
            ads.output += "\n" + "google_afs_gl = '" + ads.options.language + "';";
            ads.output += "\n" + "google_afs_adsafe = 'high';";
        }

        if (part.fallback == false) ads.output += "\n</script>";
    }

    //Erstellt die Zonen Variablen fuer die Werbung
    this.createCallScript = function(part){
	adtype = part.type || "afc";

        if (part.fallback == false) ads.output += "\n<script type='text/javascript'>";

        if (part.hints){ 
            ads.output += "\n" + "google_hint = '" + part.hints + "';";
        } else if (ads.options.hints){ 
            ads.output += "\n" + "google_hint = '" + ads.options.hints + "';";
        }


        if (adtype == "afc"){
            if (part.channel){ 
                ads.output += "\n" + "google_ad_channel = '" + part.channel + "';";
            } else if (ads.options.channel){ 
                ads.output += "\n" + "google_ad_channel = '" + ads.options.channel + "';";
            }
            ads.output += "\n" + "google_max_num_ads = '" + (part.container.length + 1) + "';";

            if (part.keyword){
                ads.output += "\n" + "google_kw_type = 'broad';";
                ads.output += "\n" + "google_kw = '" + part.keyword + "';";
            }else{
                if (ads.options.keyword){
                    ads.output += "\n" + "google_kw_type = 'broad';";
                    ads.output += "\n" + "google_kw = '" + ads.options.keyword + "';";
                }
            }
        }else{
            if (part.channel){ 
                ads.output += "\n" + "google_afs_channel = '" + part.channel + "';";
            } else if (ads.options.channel){ 
                ads.output += "\n" + "google_afs_channel = '" + ads.options.channel + "';";
            }

            ads.output += "\n" + "google_afs_ad = 'w" + (part.container.length + 1) + "';";
            if (part.keyword){
                ads.output += "\n" + "google_afs_query = '" + part.keyword + "';";
            }else{
                if (ads.options.keyword){
                    ads.output += "\n" + "google_afs_query = '" + ads.options.keyword + "';";
                }else{
                    this.debug("Warning, you cant use AFS without Keyword!");
                }
            }
        
        }

        if (part.fallback == false) ads.output += "\n</script>";

        if (adtype == "afc"){
            ads.output += '\n<script language="javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>';
        }else{
            ads.output += '\n<script language="javascript" src="http://www.google.com/afsonline/show_afs_ads.js"></script>';
        }
    }


    //Erstellt die benoetigten Templates
    this.createUsedTemplates = function(){
        for (i = 0; i < 10; i++){
            eval("part = ads.options.part" + i + " || false;");
            if (part != false){
		if (ads.options.template){
		    settings.usedTemplates[ads.options.template] = true;
		}
                for (x = 0; x < part.container.length; x++){
                    element = part.container[x];
                    for (var template in element){
                        if(template == "template") settings.usedTemplates[eval("element." + template)] = true;
                    }
		    if (part.template){
			settings.usedTemplates[part.template] = true;
		    }
                }
            }
        }

        foundActiveTemplate = false;
        for (i = 0; i < settings.usedTemplates.length; i++){ if (settings.usedTemplates[i] != false) foundActiveTemplate = true; }
        if (foundActiveTemplate == false) settings.usedTemplates[settings.defaultTemplate] = true;

        for (i = 0; i < settings.usedTemplates.length; i++){
            if (settings.usedTemplates[i] != false){
                code = this.getTemplate(i);
                this.debug("Writing Template Code (" + i + "):");
                this.debug(code);

                useddoc = this.getDocumentHandler();
                newdiv = document.createElement("DIV");
                newdiv.innerHTML = code;
                try{
                    useddoc.firstChild.appendChild(newdiv);
                }catch(e){
                    useddoc.appendChild(newdiv);
                }
            }
        }
    }

    //Gibt die gesammelten Variablen und JS Calls aus
    this.getAdsense = function(){
        this.debug("Using Ad Part JS code:");
        this.debug(ads.output);
        document.write(ads.output);
    }

    //Google Adsense Antwort
    this.reciveAdsense = function(google_ads){
        blockedAdsense = false;

        this.debug("Reciving Ads (Callcount : " + ads.callcount + "):");
        this.debug(google_ads);

        if (google_ads.length == 0){
            if (ads.noAds.indexOf(ads.callcount) == -1){
                ads.noAds.push(ads.callcount);
            }
        }else{
            //Im falle des Fallbacks, muessen wir das noAds array cleanen da wir ja jetzt doch werbung haben
            if (ads.noAds) if (ads.noAds.indexOf(ads.callcount) !== -1) ads.noAds[ads.noAds.indexOf(ads.callcount)] = -1;

            ads.recived.push({
                'ads' : google_ads,
                'callcount' : ads.callcount
            });
        }
    
        ads.callcount = ads.callcount + 1;

        if (settings.domReady == true){
            this.insertAdsense();
        }
    }

    this.insertAdsense = function(){
        //Da das document fertig geladen wurde, kann man diese funktion nicht mehr verwenden, also ueberlagern wir sie
	//Sonst kann google nicht weiter arbeiten ;)
        document.write = function(param){ camaoAdsenseObj.document_write_overload(param); }

        ads.useTemplateNumber = "";
        for(var i = 0; i < ads.recived.length; i++){
            recived = ads.recived[i];
            eval("part = ads.options.part" + (recived.callcount + 1) + " || false;"); //(recived.callcount + 1) weil unsere Parts bei 1 anfangen nicht bei 0
            if (part != false){
		if (ads.options.template){
		    ads.useTemplateNumber = ads.options.template;
		}
                for (var x = 0; x < part.container.length; x++){
                    element = part.container[x];
		    if (part.template){
			ads.useTemplateNumber = part.template;
		    }

                    for (var target in element){
                        if(target == "template"){
                            ads.useTemplateNumber =  eval("element." + target);

                        }else{
                            if (ads.useTemplateNumber == ""){
                                ads.useTemplateNumber = settings.defaultTemplate;
                            }
                            node = document.getElementById(target);
                            if (recived.ads.length != 0){
                                if (node){
                                    if (recived.ads[x]){
    				        this.createAdsenseContext(node, recived.ads[x], ads.useTemplateNumber);
                                    }else{
					this.debug("Missing ad for  : " + target);
                                    }
				}else{
				    this.debug("Unknown Target ID : " + target);
				}
                            }
                            useTemplateNumber = "";
                        }
                    }
                }
            }
        }
	//Wir reseten das array weil wir alles verarbeitet haben was wir zurzeit haben
	ads.recived = new Array();

        // wir sind beim letzten part, jetzt koennen wir schaun ob werbung fehlt
        if (this.countParts() == ads.callcount ){
            for (var i = 0; i < ads.noAds.length; i++){
                noAd = ads.noAds[i];
                if (noAd != -1){
		    //(noAd + 1) weil unsere Parts bei 1 anfangen nicht bei 0
                    eval("part = ads.options.part" + (noAd + 1) + " || false;"); 
                    if (part != false){
                        this.debug("No Adsense recived for part " + (noAd + 1));

                        if (part.fallback_keyword){
                            this.debug("Using fallback keyword " + part.fallback_keyword);
        
                            ads.callcount = 0;
                            part.keyword = part.fallback_keyword;
                            part.fallback_keyword = "";
                            part.fallback = true;
                            this.createDefaultScript(part);
                            this.createCallScript(part);
                            this.getAdsense();
                        }else{
			    //Wir haben kein fallback keyword gefunden also schaun wir nach
			    //dem HTML Fallback oder entfernen den container
                            for (var x = 0; x < part.container.length; x++){
                                element = part.container[x];
                                for (var target in element){
                                    if(target != "template"){
                                        node = document.getElementById(target);
                                        fallback_html = eval("part.container[x]." + target + ".fallback_html");
                                        if (fallback_html){
                                            this.debug("Using fallback HTML");
                                            node.innerHTML = fallback_html;
                                        }else{
                                            this.debug("No Fallback found, remove element");
                                            mainContainer = this.up(node, "adsenseContainer");
                                            if (mainContainer){
                                                found = false;
						//Existiert im Container Werbung ?
                                                if (/(adsense([0-9]+))\">(.*){1,}<\/div>/.test(mainContainer.innerHTML) == true) {
                                                    found = true;
                                                }
						if (!found) mainContainer.parentNode.removeChild(mainContainer);
                                            }else{
                                                this.debug("Cant remove element, doesnt find the main class adsenseContainer");
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }                    
            }
        }
    }

    //Wird bei verwendung von document.write aufgerufen (after dom ready!)
    this.document_write_overload = function(param){
        quelle = false;
        useddoc = this.getDocumentHandler();

        if (param.indexOf("google_ad_output") !== -1){
            parts_tmp1 = param.split("<script");
            jscode = parts_tmp1[0];
            eval(jscode);

            parts_tmp1 = param.split("src=\"");
            parts_tmp2 = parts_tmp1[1].split("\"");
            quelle = parts_tmp2[0];

        }else if (param.indexOf("googlesyndication.com")  !== -1){
            parts_tmp1 = param.split("src=\"");
            parts_tmp2 = parts_tmp1[1].split("\"");
            quelle = parts_tmp2[0];

        }else if (param.indexOf("google_protectAndRun")  !== -1){
            parts_tmp1 = param.split("<script>");
            parts_tmp2 = parts_tmp1[1].split("</");
            jscode = parts_tmp2[0];
            eval(jscode);

        }else if (param.indexOf("googleads.g.doubleclick.net")  !== -1){
            parts_tmp1 = param.split("src=\"");
            parts_tmp2 = parts_tmp1[1].split("\"");
            quelle = parts_tmp2[0];
        }else{
	    this.debug("Unknown string recived : " + param);
	}

        if (quelle != false){
            //Aus irgendeinem grund wird der letzte call doppelt abgesetzt
            if (quelle != settings.lastdoubleclicksurl){
                settings.lastdoubleclicksurl = quelle;
                var jslink = document.createElement("script");
                jslink.setAttribute("type", "text/javascript");
                jslink.setAttribute("src", quelle);
                useddoc.appendChild(jslink)
            }
        }
    }
    
    //Liefert die Anzahl der Zonen
    this.countParts = function() {
        found = 0;
        for(var i = 0; i < 10; i++){
            eval("part = ads.options.part" + (i + 1) + " || false;"); //(recived.callcount + 1) weil unsere Parts bei 1 anfangen nicht bei 0
            if (part != false) found++;
        }
        return found;
    }

    //Liefert anhand von
    this.createAdsenseContext = function(target, ad, templateNumber){
        this.debug("Inserting Ads for Target : " + target);

        usedTemplate = document.getElementById("adsense_template_" + templateNumber);
        if (usedTemplate){
            cloned = usedTemplate.cloneNode(true);
            cloned.id = "";
            for (var x = 0; x < 15; x++){ ad.url = ad.url.replace("&amp;","&"); }

            this.select(cloned, "adsense-visible_url")[0].innerHTML = ad.line1;
            this.select(cloned, "adsense-url")[0].href = ad.url;
            this.select(cloned, "adsense-url")[0].target = "_blank";
            this.select(cloned, "adsense-line2")[0].innerHTML = ad.line2;
            this.select(cloned, "adsense-line3")[0].innerHTML = ad.line3 || "";
            this.select(cloned, "adsense-visible_url")[1].innerHTML = ad.visible_url;
            this.select(cloned, "adsense-url2")[0].href = ad.url;
            this.select(cloned, "adsense-url2")[0].target = "_blank";

            target.appendChild(cloned);
	    cloned.onmouseover = function(){
		this.className = this.className.replace(" " + settings.hoverclass,"");
		this.className = this.className + " " + settings.hoverclass;
	    }
	    cloned.onmouseout = function(){ this.className = this.className.replace(" " + settings.hoverclass,""); }
            cloned.style.display = "";

        }else{
            this.debug("Template nicht gefunden, versucht 'adsense_template_" + templateNumber + "' zu laden");
        }
    }
    
    //Liefert das Template anhand der ID aus
    this.getTemplate = function(part){

        if (ads.options.speach == "hu"){
            google_words = "Google-hirdet&eacute;sek";
        }else if (ads.options.speach == "ro"){
            google_words = "Anunturi Google";
        }else{
            google_words = "Google-Anzeigen";
        }

        if (part == 1){
            return "" +
                "<div>" +
                    "<div class='adsense' id='adsense_template_1' style='display:none;'>" +
                        "<span class='adsense-googleAds'><a href='http://services.google.com/feedback/online_hws_feedback'>" + google_words + "</a></span>" +
                        "<div class='adsenseItem'>" +
                            "<a href='#' class='adsense-url'>" +
                                "<span class='adsense-visible_url'></span>" +
                            "</a>" +
                            "<a class='adsense-url2'>" +
                                " - <span class='adsense-visible_url'></span>" +
                            "</a>" +
                            "<div class='adsense-lines'>" +
                                "<span class='adsense-line2'></span>" +
                                "<span class='adsense-line3'></span>" +
                            "</div>" +
                        "</div>" +
                    "</div>" +
                "</div>";
        
        }else if (part == 2){
            return "" +
                "<div>" +
                    "<div class='adsense' id='adsense_template_2' style='display:none;'>" +
                        "<span class='adsense-googleAds'><a href='http://services.google.com/feedback/online_hws_feedback'>" + google_words + "</a></span>" +
                        "<div class='adsenseItem'>" +
                        "<a href='#' class='adsense-url name'>" +
                            "<span class='adsense-visible_url'></span>" +
                        "</a>" +
                        "<span class='adsense-line2'></span>" +
                        "<span class='adsense-line3'></span>" +
                        "<br />"+
                        "<a class='adsense-url2'>" +
                            "<span class='adsense-visible_url'></span>" +
                        "</a>" +
                        "</div>" +
                    "</div>" +
                "</div>";
    
        }else if (part == 3){
            return "" +
                "<div>" +
                    "<div class='adsense' id='adsense_template_3' style='display:none;'>" +
                        "<span class='adsense-googleAds'><a href='http://services.google.com/feedback/online_hws_feedback'>" + google_words + "</a></span>" +
                        "<div class='adsenseItem'>" +
                            "<a href='#' class='adsense-url'>" +
                                "<span class='adsense-visible_url'></span>" +
                            "</a>" +
                            "<a class='adsense-url2'>" +
                                " - <span class='adsense-visible_url'></span>" +
                            "</a>" +
                            "<div class='adsense-lines'>" +
                                "<span class='adsense-line2'></span>" +
                                "<span class='adsense-line3'></span>" +
                            "</div>" +
                            "<a class='adsense-url3'>" +
                                "<span class='adsense-visible_url'></span>" +
                            "</a>" +
                        "</div>" +
                    "</div>" +
                "</div>";
        }else if (part == 4){
            return "" +
                "<div>" +
                    "<div class='adsense' id='adsense_template_4' style='display:none;'>" +
                        "<span class='adsense-googleAds'><a href='http://services.google.com/feedback/online_hws_feedback'>" + google_words + "</a></span>" +
                        "<div class='adsenseItem'>" +
                        "<a href='#' class='adsense-url name'>" +
                            "<span class='adsense-visible_url'></span>" +
                        "</a>" +
                        "<span class='adsense-line2'></span>" +
                        "<span class='adsense-line3'></span>" +
                        "<a class='adsense-url2'>" +
                            "<span class='adsense-visible_url'></span>" +
                        "</a>" +
                        "</div>" +
                    "</div>" +
                "</div>";
        }

    }

    //Helper Functions
    this.getDocumentHandler = function(){ return document.body || document.documentElement; }
    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;
    }
    this.up = function(element, classname){
        if (element){
            if (element.className.indexOf(classname) != -1){
                return element;
            }else{
                stop = false;
                do{
                    if (!element.parentNode) stop = true;
                    element = element.parentNode;
                    try{ if (element.className.indexOf(classname) != -1) return element; }catch(e){}
                } while(stop == false);
            }
        }else{
            false;
        }
    }

    this.debug = function(msg){
	if (ads.options.debug) console.log(msg);
    }
}

//Falls wir im IE sind dann kennt er indexOF nicht, also nachbaun ;)
if(!Array.indexOf){
    Array.prototype.indexOf = function(obj){
        for(var i=0; i<this.length; i++){ if(this[i]==obj) return i; }
        return -1;
    }
}

//Wird von Google aufgerufen, liefert ein array mit werbung
function google_ad_request_done (google_ads) { camaoAdsenseObj.reciveAdsense(google_ads); camaoAdsenseObj.getNextAdsense(); }
function google_afs_request_done(google_ads) { camaoAdsenseObj.reciveAdsense(google_ads); camaoAdsenseObj.getNextAdsense(); }

//Wir initialisieren unsere klasse
var camaoAdsenseObj = new camaoAdsense();