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;
            }
 

            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;","&");
 
            cloned = camaoAdsenseObj.$(templateID).cloneNode(true);
            cloned.id = "";
 
            camaoAdsenseObj.select(cloned, templateID + "-visible_url")[0].innerHTML = e.line1;
            camaoAdsenseObj.select(cloned, templateID + "-url")[0].href = e.url;
 
            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;
            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); }
